DDD学习笔录——提炼问题域之知识提炼与协作的基本原则
1、通过通用语言达成共识
通用语言,已经强调过好多遍了,在DDD再怎么重视都不为过,后面可能还会讲。
知识提炼的输出以及共识的构建就是常见的通用语言(UL)。
当与业务相关人员和主题专家进行建模时,每个人都应该有意识地始终应用富含领域专有术语的通用语言。这一语言必须现实制作,并在描述领域模型和问题域时使用。该语言还应该用于模型的代码实现,使用用作类名、属性和方法名称相同的术语和概念。正是这一语言使得业务和开发团队拥有了关于软件的有意义沟通。
UL用于将模型的代码描述绑定到以业务能够理解的语言和图表交流的概念模型。这句话说了好多遍,再重复一次。
UL它将包含来自业务的专业术语 以及在进行问题域的用例建模时发现的新概念和术语。
UL能避免持续从技术模型转换到业务模型的情况,因而也就能避免出现遗漏掉必不可少的见解的情况。
UL是一个共识。
2、领域知识的重要性
领域知识是关键,其重要性甚至要远甚于技术知识。
要处理具有复杂过程和逻辑 的业务 的团队需要将自身沉浸在问题域中,学习吸收所以相关的领域知识。这样让团队能够专注在要点上,并在其开发的应用程序代码库核心处创建一个能够满足业务用例的模型。而且在整个应用程序的生命周期中都要保持这样的做法。
如果不能用简单术语向你的业务用户讲诉问题域中的复杂概念,那么无法做好开始在其中开发软件的准备。
要为你正在构建的复杂应用程序 快速地持续发布更新(即便是在稀奇古怪的业务要求,或变化无常的功能时),就需要你在设计和开发期间重新调整你的精力倾注点——需要让你的团队专注于业务问题,而不是仅仅是技术。
3、一个持续的过程
知识提炼是一个持续的过程;团队应该持续地为问题域的简单视图而努力,该简单视图只专注于相关内容以便实现创建有用模型的目标。模型驱动设计和领域模型的演化是一个持续过程。
开发团队、业务相关人员以及主题专家之间的协作不应该局限在项目开始阶段。知识提炼在整个应用程序构建的生命周期中应该在业务参与的情况下被持续关注。
认识到随着系统的每一次迭代,模型都会有所演化,这一点也是很重要。模型永远不会尽善尽美,它只是对于当前问题可用而已。因为,当新的需求被添加进来时,模型就会改变;新的行为和用例也将需要模型的改变。
随着每一次的迭代完成,团队对于问题域的理解都会提升。这将带来 能够极大简化模型的更深刻的见解以及设计突破。
在系统投入使用时,模型可能也需要演化,这是由像 性能或对系统用途的更好理解 这样一些技术原因造成的。
一个好的模型要能够足够灵活以支持变更;一个成熟的模型会保有丰富且传神的概念以及问题域的专业术语,并且能同时业务和技术团队所理解。
DDD学习笔录——提炼问题域之知识提炼与协作的基本原则的更多相关文章
- DDD学习笔录——提炼问题域之知识提炼与协作
提炼问题域的意义 理解一个复杂问题域以便创建简单且有用的模型需要深入详尽的知识以及深刻的见解,这些只能通过与从内到外理解该领域的人协作得到.对模型的设计进行连续实验和探究正是DDD的能力所能实现的.只 ...
- DDD学习笔录——提炼问题域之有效提炼知识的模型(三)
方式六:延迟对模型中概念的命名 对领域建模时命名很重要. 因为在不断的知识提炼过程中经常会发现已经被命名的概念与你最初理解的有出入,这时你当初的命名就会变成一个问题.其问题在于 最初选作名称的这个词 ...
- DDD学习笔录——简介领域驱动设计的实践与原则
DDD在存在许多DDD模式的同时,也有大量实践和指导原则,这些都是DDD思想体系成功的关键. 1.专注于核心领域 DDD强调的是在核心子域付出最多努力的需要.核心子域是你的产品会成功还是会失败的差异化 ...
- DDD学习笔录——领域驱动设计的常见误区(即错误的理解)
可以将DDD看成一种开发思想体系:它促成了一种新的以领域为中心的思维方式. 它是一种学习过程,而非最终目标,这就是DDD的最大优势. 任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力 ...
- DDD学习笔录——简介DDD的战略模式如何塑造应用程序的架构
前一篇,简单介绍了DDD战略模式的提炼问题域,这篇简单介绍它如何塑造应用程序的架构. 1.创建一个模型以解决领域问题 为每一个子域构建一个软件模型以处理领域问题并让软件与业务保持一致. 这个模型并非现 ...
- DDD学习笔录——提炼问题域之与领域专家一起获得领域见解
业务和开发团队之间的协作是DDD必不可少的部分,并且它是处于开发阶段的产品获得成功的关键. 领域专家指的是那些从业务领域的政策和工作流程到棘手处和特性都具有深刻理解的人.能够为你的问题区域提供深刻见解 ...
- DDD学习笔录——简介DDD的战术模式、问题空间和解空间
DDD的战术模式 DDD的战术模式(也称为模型构造块)是一个帮助创建 用于复杂有界上下文的有效模型的 模式集合. 也就是我们常说的设计模式. 问题空间 问题空间将问题域提炼成更多可管理的子域,是真对于 ...
- DDD学习笔录——领域驱动设计DDD概念总结
- Matlab高级教程_第一篇:Matlab基础知识提炼_01
第一篇:Matlab基础知识提炼: 这一篇主要用系统和提炼性的语言对Matlab基础知识进行总结,主要适用于有语言基础的学习者.尽量不讲废话. 第一部分:Matlab是什么? 1 Matlab是Mat ...
随机推荐
- 原生JS日历 + JS格式化时间格式
公司项目中用到,以前没做过,废了好几个小时 终于做好了 先来效果图(暂时没写样式 凑合着看吧) 点击左右按钮都能改变月份 下方表格中的数据也会跟着变化 贴上代码 : html部分: <div s ...
- 017对象——对象 get_object_vars get_parent_class is_subclass_of interface_exists
<?php /** */ //get_object_vars($obj) 获得对象的属性,以关联数据形式返回. /*class study{ public $name; public $age; ...
- python基础之socket编程(二)
ssh远程执行命令: 思路分析: 客户端给服务端发送命令,服务端返回一个输出结果传给客户端. #coding:utf-8 #买手机 import socket import struct import ...
- 一个css3 DNA 效果
这个效果就是 不断沿 Y 轴旋转 <div id="container"></div> <style> body{ background:bla ...
- CollectionUtils工具类使用指南
CollectionUtils提供很多对集合的操作方法,常用的方法如下:(参考文章:http://www.open-open.com/code/view/1420470842125) import o ...
- 《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group
agenda-group 规则的调用与执行是通过StatelessKieSession或KieSession来实现的,一般的顺序是创建一个StatelessKieSession或KieSession, ...
- 看过自会理解, Photon Server 常见概念分析.
http://stackoverflow.com/questions/10823915/photon-server-newbie-questions/11653419#11653419 Channel ...
- 用php实现四种常见的排序算法
几种常见的排序 排序是一个程序员的基本功,对于初级phper,更是可以通过排序算法来锻炼自己的思维能力. 所谓排序,就是对一组数据,按照某个顺序排列的过程.下面就总结四种常用的php排序算法,分别是冒 ...
- [QT]QToolBox 抽屉控件初步学习使用
创建一个不带界面的widget工程201701100038. main.c #include "widget.h" #include <QApplication> #i ...
- python之懒惰属性(延迟初始化)
Python 对象的延迟初始化是指,当它第一次被创建时才进行初始化,或者保存第一次创建的结果,然后每次调用的时候直接返回该结果.延迟初始化主要用于提高性能,避免浪费计算,并减少程序的内存需求. 1. ...