在我的博客阅读本文
目录
1. Top Level
领域驱动设计共有两个部分:
- 战略设计
- 战术设计
战略设计也可理解为策略设计,是从宏观角度着眼于领域的分析设计,属于系统分析阶段,注重如何从有界上下文中寻找领域模型,战略模式由有界上下文、无所不在的语言和上下文映射组成
战术设计属于设计代码阶段,使用聚合、实体、值对象等对象类型概念表达领域模型。
2. 有界上下文
DDD有界上下文属于DDD战略设计的重要概念。
有界上下文:领域即边界,边界靠分类,分类需从内外部入手。
有界上下文是指在空间或时间上有边界的一段环境背景,它确定了每个模型的适用范围,模型体现了这个范围内的逻辑一致
有界上下文是根据逻辑一致性划分软件的模式。也就是说:有界上下文是人根据客观事物中的一致性逻辑去划分软件。注意上下文不是软件中的模块,而是一个微服务。
2.1. 统一语言
统一语言是大家统一使用的术语,不会让别人产生歧义。
统一语言是在整个团队的协商下发展起来的,这种无所不在的、通用语言必须在团队成员之间的任何场合都可以表达,以及可以用软件模型来表示。它是由团队中的开发人员、领域专家和其他参与者共享的语言。统一语言不是由领域专家指定的语言,而是应该由每个参与者共同协商,所以,类似ERP里面指定术语的方式是不可行的,因为即使人们被强行接受这些标准用语,对其理解也可能是片面的。它不应该在组织中由上而下,而应该由下而上整理出来。
没有统一语言的后果:
- 由于缺少统一语言导致人们对其他人的概念需要进行“翻译”,这对领域模型建立非常不利,并会导致错误的领域模型,产品团队和技术团队的沟通产生问题大部分是因为这种翻译。
- 更多的公司是缺乏共同的统一语言,团队成员使用不同的术语而没有意识到。不同的术语带来理解的分歧。
- 很多公司实际上存在统一语言,但是却并不使用。
- 业务数据不开放导致人们接触不到统一语言。(可能因为安全问题,部分业务数据没有开放给所有人)
统一语言必须在领域模型中表达出来,主要体现在领域模型中的名称上。
2.2. 如何发现有界上下文和统一语言
方法论:
- 首先,可以通过画图的方式去发现。画图简单扼要,可以在白板上表达自己的业务领域,不要担心它们是否为正式设计;也可以事先使用UML工具画出UML图来表达自己的理解。最好的软件是没有软件,代码实现非常昂贵,因为代码实现涉及太多细节,一旦整个思考方向发生变化,所有的细节就要全部摧毁,重新来一次,而使用画图方式则很便宜。
- 其次,通过专家小组会议创建词汇表,定义所有所需术语的词汇表。注意这个词汇表应该是在征询意见的基础上,切不可由上而下强行推广。改变人们的语言习惯很难,如同改掉方言口音一样。
- 最后,可以通过事件风暴的方式发现统一语言和有界上下文,领域专家和开发人员可以实现对业务流程迭代学习的快速循环,从而促进统一语言的发展。(后文会专门说事件风暴,这里先列在这里)
- 通过组织形式去发现。这里存在一个康威定理(ConwaysLaw),它的要义是:组织形式决定架构。它指出系统架构代表实现系统的组织的沟通结构。这是一种根据业务流程涉及的不同组织来划分上下文的方法,这种划分方法是一种朴素直接的方式,但是需要知道,业务流程是业务规则的表象,如果只是根据流程进行划分,有可能没有抓住领域的本质(流程和组织部门可能不断调整,属于变化的因子),造成软件系统成为其落后流程的附属品,可能并没有实现整合资金流、信息流和资源流等高级目相,但是这种方式有助于技术人员第一次接触业务时理解业务项目。
最终流程: