DDD
1. 解决的问题
产品领域模型设计。
解决复杂性。
以领域知识为基础,建立通用语言,统一业务、需求、实现业务概念。
2. 概念
2.1 战略设计(业务分析)
2.1.1 领域
组织所做的事情以及其包含的一切,就是组织的业务范围和做事方式,也是软件开发的目标范围。 领域驱动设计就是从领域出发,分析领域内模型及其关系,进而设计软件系统的方法。
2.1.2 子域
在业务复杂的情况下,不能只设计一个领域,会把领域拆分成多个子域,比如用户、订单等。
2.1.3 限界上下文
每一个子域,都有一下概念上的领域边界,在这个边界中,任何领域对象都只表示特定于该边界内部的确切含义。这样的边界称为限界上下文。限界上下文和子域具有一对一的关系,用来控制子域的边界,保证子域内的概念统一性。
通常一个限界上下文或者说一个子域对应一个组件或者一个模块,或者一个微服务,一个子系统。
不同的限界上下文之间会有各种的交互合作。DDD 使用上下文映射图来设计这种关联和交互。
2.2 战术设计(代码设计)
现实中流行的是 mvc 分层模式(可以称为事务脚本)
实体只是数据库表的映射。
dao 封装对数据库层面的操作。
业务逻辑集中在 service 层。
controller 层对外暴露接口。
2.2.1 实体
领域模型对象也被称为实体,每个实体都是唯一的,具有唯一标识。
实体设计是 DDD 的核心,首先通过业务分析,识别出实体对象,然后通过相关的业务逻辑设计实体的属性和方法。
2.2.2 值对象
在实体的生命周期中,不会发生改变的一组相关概念可以设计成值对象。
2.2.3 聚合
聚合是一个关联对象的集合,我们将其做为一个单元来处理数据更改。每个集合都有一个根和一个边界。
聚合根:将多个实体和值对象聚合在一起的实体。
参考
版权声明: 本文为 InfoQ 作者【陈皮】的原创文章。
原文链接:【http://xie.infoq.cn/article/3817e5e24600643d6e4e0115d】。文章转载请联系作者。
评论