DDD 领域驱动设计落地实践系列:初识 DDD( 二 )


为什么需要 DDD?
通过上文,我们对 DDD 有了初步的了解,知道他是一种应对软件复杂度的架构设计方法论 。那我们先来看一个问题,那就是到底哪些因素导致了软件设计的复杂性 。因为只有搞清楚了软件复杂度的因素,我们才能更加理解我们为什么需要使用 DDD 来应对越来越复杂的软件系统设计 。
1、业务复杂度高
需求堆积如山,业务规模随着时间的推移也在不断增长,系统又很庞大,不同业务之间相互影响 。就拿电商业务来说,就有商品服务、用户服务、库存服务、订单服务、积分服务、优惠券服务、物流服务等等几十个微服务类别,组成了非常复杂的业务系统 。业务系统多的情况下,业务边界由于历史原因也存在划分不清晰的问题,系统之间各种依赖 。一旦来了个牵扯很多子域系统的大项目的时候,经常会因为业务边界问题,团队之间扯的脸红脖子粗,实在劳心劳力 。
2、业务需求变化快
互联网行业各个业务板块竞争都非常激烈,谁能更快推出更加便捷、更加符合用户预期的产品,谁才抢夺市场,占领市场先机 。因此相应的商业流程自然变化快,业务今天是这样的流程,明天就变了 。这种不断变化的场景以及需求对整个软件系统带来了非常大的设计挑战 。
3、跨团队协作难
一个大项目,很大情况下需要各个子域的团队进行通力合作才能完成,来完成业务的全链路 。如果没有统一的业务语言,那么必定导致团队之间的沟通效率低,甚至出现业务传达层层递减的情况 。团队之间的反复沟通也会增大设计人员、开发人员的沟通成本 。
如上所述,我们在设计软件架构的时候需要考虑到如何更好的实现需求、更好的应对不断变化的需求以及更好的和他人协作来实现 。因此传统的数据驱动设计的方式无法满足我们的实际需要了,要是有一种架构设计模式可以支撑我们应对上述的这些挑战的话,那该是多么幸福的一件事情 。
因此,综上我们需要一套架构设计的方法论来指导我们进行复杂业务系统的设计,那么 DDD 就是一个非常不错的选择 。
DDD 的价值
通过上问的描述,我们大概知道了为什么需要使用 DDD 来实现软件架构设计 。那么 DDD 会给我们带来怎样的价值呢?
统一业务语言:通过使用统一的领域语言,消除了团队间的分歧,提升团队间的沟通效率 。
沉淀业务知识:通过领域模型沉淀领域知识,提升业务建模能力,清晰表达业务核心语义 。
清晰业务边界:统一各个子域的认识,通过领域模型界定需求实现边界,表面无休止的团队之间扯皮,拉通团队认知 。
提升变化应对:通过领域模型与数据模型的分离,将核心业务的不变与需求的变进行有效隔离,提升架构应变化的能力 。

DDD 领域驱动设计落地实践系列:初识 DDD

文章插图
 
DDD 重要概念
1、统一语言
秦始皇统一六国之后,首先做的就是在全国范围内进行了文字、度量衡、钱币的统一 。其中统一文字,就是为了方便各个地域人们的沟通交流,为实现中国的大一统奠定了基础 。
DDD 领域驱动设计落地实践系列:初识 DDD

文章插图
 
那么在 DDD 中,就是要在领域专家、设计团队、研发团队中建立一套统一的业务术语体系,让大家对于领域知识在描述层面上达成一致,从而解决各个团队之间的沟通协作问题 。这里的统一语言主要体现在两个方面:
(1)统一的领域术语:所谓领域术语就是在该领域内的各个对象在命名上达成一致的共识,例如在库存领域中的 SKU,各个团队都知道 SKU 代表的是库存进出的计量单位,这样在进行业务讨论的时候,一提到 SKU 大家就都知道它所带代表的含义了,不用再进行过多的解释说明 。
(2)统一的领域行为:领域行为就是领域的行为描述,例如在库存域中涉及的货物的上架动作就是属于该领域的特有领域行为,因此我们可以看出来,领域行为是一种从领域模型角度来进行行为的描述而不是具体的实现角度 。
2、领域模型
在搞清楚什么是领域模型之前,我们看下《领域驱动设计》中关于领域的定义 。
 
领域即是一个组织所做的事情以及其中所包含的一切 。商业机构通常会确定一个市场,然后再这个市场中销售产品和服务 。每个组织都有它自己的业务范围和做事方式 。这个业务范围以及其中所进行的活动便是领域 。


推荐阅读