-
目录
概念介绍
领域驱动设计(DDD)
面向数据表设计
领域驱动设计优点
设计承接分层架构对比
-
概念介绍
- 领域驱动设计是一种设计思想,在落地时主要使用四层架构承接
- 面向数据表设计,一般使用三层架构承接,但是也可以使用四层架构承接
-
领域驱动设计(DDD)
- DDD 是一种在面向高度复杂的软件系统时,关于如何去建模的方法论。
- DDD解决了什么问题?
- DDD解决了对复杂应用建模的问题,通过DDD提高架构和代码的可理解性,从而降低维护成本。
- 适用场景
- DDD 适用于复杂业务建模以及业务场景不确定的任务 。
- 对于业务场景确定或者,业务场景简单的系统,面向数据库设计更适合。
- 承接DDD设计的分层架构
- 四层架构
-
- User Interface(用户接口层)
- 职责:
- 负责向用户显示信息、解释用户命令。这里的用户可以是真正的用户、自动化测试程序、批处理脚本等。
- 职责:
- Application Layer(应用层)
- 主要负责:
- 负责对领域服务、其他应用服务的封装、编排、组合。
- 主要特点:
- 这一层都很薄,主要是服务的组合与编排。
- 特别注意:
- 不要将领域层的逻辑放在应用层中实现,否则很容易导致应用层、领域层的边界混乱,最终导致DDD的四层架构变成三层架构。
- 主要负责:
- Domain Layer(领域层)
- 主要职能:
- 实现领域对象或者聚合自身的原子业务逻辑,关注领域模型的能力,不太关注外部用户操作或者流程方面的控制。
- 主要包括:
- 领域服务、值对象、实体、聚合、聚合根等。
- 主要职能:
- Infrastructure Layer(基础设施层)
- 主要职能:
- 为其他各层提供通用的技术和技术服务。
- 主要包括:
- 封装消息中间件、网关、缓存、文件服务、数据库等。
- 主要作用
- 封装基础资源的服务,实现应用层、领域层、基础层解耦,降低对外部资源依赖。例如:如果没有此层,当消息中间件、缓存变化时,将会大面积修改业务逻辑。
- 主要职能:
- User Interface(用户接口层)
-
- 六边形模型
- 洋葱模型
- 四层架构
-
面向数据表设计
- 传统开发,以设计数据表为中心。
- 在面向数据表设计中,系统的开发主要集中于数据表的设计,包括字段的设计以及表关系的设计。
- 数据集中存储在不同的数据表中,数据表的设计需要符合各种范式和标准。
- 业务逻辑通过一系列针对这些数据表的增删改查来实现。
- 适用场景
- 承接面向数据表设计的分层架构
- 三层架构
- User Interface layer(表示层, UI) 接受对用户的请求并返回数据,将结果呈现给用户。
- Business Logic Layer(业务逻辑层, BLL) 主要负责接受表现层的请求,进行各种业务逻辑运算,然后通过数据访问层完成数据的操作。
- Data Access Layer(数据访问层, DAL) 主要负责数据的查询、持久化等操作,关注数据一致性、准确性,不关注业务逻辑
- 四层架构
- 可以使用四层架构承接面向数据表设计,将三层架构中的service层进行拆分
- 三层架构
-
领域驱动设计优点
- 快速响应需求变化
- 例子
- 场景
- 业务新增需求变化
- 领域驱动设计的处理流程
- 分析需求
- 产出需求对应的领域事件,命令
- 领域建模,产出领域对象
- 优点
- 快速定位新增需求对应的领域对象,映射到对应的数据模型
- 面向数据表设计的处理流程
- 分析需求
- 分析需要新增的字段
- 确认数据表的变化
- 具体在哪个表格新增字段
- 编写代码,操作数据表格,完成业务
- 缺点
- 无法确认应在哪张表新增字段
- 场景
-
设计承接分层架构对比
- 三层架构vs四层架构
- 区别:
- 三层架构:
- 三层架构的业务处理都放在Service层,所有的Service对象都处在同一个逻辑层级,Service对象即负责领域内逻辑,又负责领域间协调(此处的领域泛指业务边界)。Service层的内部是一张网。
- 四层架构:
- 四层架构将领域间协调和领域内逻辑处理分开成两层,分别用application Service和domin service处理,这样使得整个业务处理层(application service + domain service )变成了一个树形结构。
- 在所有的数据结构中,树形结构是在能够承载比较多信息量的同时,逻辑结构最简单的数据结构。
- 三层架构:
- 区别:
- 三层架构vs四层架构



