DDD战略设计涉及的相关概念
涉及的概念: 1. 领域和子域 2. 界限上下文 3. 架构风格
领域和子域
领域的意思,其实就是明确某一方面的称谓。我们开发某一套业务系统,比如快递行业的业务系统,那么这个快递业务系统之内的所有业务都包含在领域中,这个领域称之为快递业务领域,其中可能有很多的子领域,或者是业务模块,但都属于这个领域之内。
界限上下文
子域拆分成了支撑子域(Generic Subdomain)和通用子域(Common Subdomain)。对于领域来说,除了核心域,用来支撑核心域的子域,就可以称之为支撑子域,在整个领域中,可以被公用的子域,称之为通用子域,通用子域还有一个理解是,在某一个业务领域中,它可能是被看作是通用领域,但是在另外一个业务领域中,它可能就被看作是核心域了,举个例子,比如在团购业务系统中,地图服务可能就被看作是通用领域,而对于地图服务商来说,毫无疑问,地图服务将是他们的核心域。
架构风格
分层架构
六边形架构
DDD战术设计涉及的相关概念
涉及的概念 1. 实体 2. 值对象 3. 聚合 4. 领域服务 5. 资源库 6. 领域事件
实体
许多对象不是由它们的属性来定义,而是通过一系列的连续性(continuity)和标识(identity)来从根本上定义的。只要一个对象在生命周期中能够保持连续性,并且独立于它的属性(即使这些属性对系统用户非常重要),那它就是一个实体。
值对象
当你只关心某个对象的属性时,该对象便可作为一个值对象。为其添加有意义的属性,并赋予它相应的行为。我们需要将值对象看成不变对象,不要给它任何身份标识,还应该尽量避免像实体对象一样的复杂性。
聚合
领域服务
资源库
领域事件
DDD具体实例(DDDSample)分析
该实例是志愿者按照 Eric Evans书(《领域驱动设计》)中提到的DDD思想构建的一个实例,在这个实例中实践了《领域驱动设计》中提到的各种模式。 《领域驱动设计》中提到很多概念都比较抽象,特别是对我这种刚准备入门的小白来说。所以我们选用这个实例来学习DDD中涉及的思想,看一看这些思想是如何在一个项目中落地实施的,当然我并不能知道该实例中对DDD思想的理解与原作者完全符合的(我认为原书《领域驱动设计》在具体落地实施方面本来提到的就比较少,所以有不同的理解和具体实施上的差异本来是很正常的),但是我觉得阅读该实例对于DDD入门者来说,肯定会有所裨益。
特别感谢DDDSample的作者们。
以下是DDDSample的github地址和文档地址。
- github 地址:https://github.com/citerus/dddsample-core
- 文档地址:http://dddsample.sourceforge.net/index.html
DDDSample的架构
以下是分层架构图
接口层
- 该层包含与其他系统进行交互的接口与通信设施。
- 可能提供包括WebServices、RMI或Rest等在内的一种或多种通信接口
- 该层主要由Facade、DTO和Assembler三类组件构成,三类组件均是典型的J2EE模式
应用层
Application层中主要组件就是Service,在领域驱动设计的架构里,Service的组织粒度和接口设计依据与传统Transaction Script风格的Service是一致的,但是两者的实现却有着质的区别。TransactionScript风格的Service是实现业务逻辑的主要场所,因此往往非常厚重。而在领域驱动设计的架构里,Application是非常“薄”的一层,所有的Service只负责协调并委派业务逻辑给领域对象进行处理,其本身并真正实现业务逻辑,绝大部分的业务逻辑都由领域对象承载和实现了,这是区别系统是Transaction Script架构还是Domain Model架构的重要标志。
领域层
Domain层是整个系统的核心层,该层维护一个使用面向对象技术实现的领域模型,几乎全部的业务逻辑会在该层实现。Domain层包含Entity(实体)、ValueObject(值对象)、Domain Event(领域事件)和Repository(仓储)等多种重要的领域组件。
基础设施层
作为基础设施层,Infrastructure为Interfaces、Application和Domain三层提供支撑。所有与具体平台、框架相关的实现会在Infrastructure中提供,避免三层特别是Domain层掺杂进这些实现,从而“污染”领域模型。Infrastructure中最常见的一类设施是对象持久化的具体实现。
DDDSample的业务场景
该项目主要是实现了一个货物的运输系统。管理员能够添加货物,指定货物运输的起点和终点,指定运输路线。用户能够查询货物所在的位置。
参考资料:
- http://www.infoq.com/cn/articles/implementation-road-of-domain-driven-design 作者 滕云
- https://blog.csdn.net/bluishglc/article/details/6681253 作者 bluishglc
- https://www.jianshu.com/p/da51d16dbdc4

浙公网安备 33010602011771号