DDD架构
定义
Domain Driven Design,领域驱动设计
本质
- 业务和技术解耦,业务变动和技术变动独立演进
- 细节依赖抽象,细节对抽象透明
vs 洋葱架构
洋葱架构有时也被称为端口和适配器架构,或者是六边形架构。不过Wade认为,后者应该是洋葱架构的一个超集。 重要概念:依赖。外层依赖内层,外层对内层透明。
Core
核心层。领域或技术无关的基础通用构件,不包含任何技术层面的概念,如数据库、Rest等
Domain
领域层。定义业务逻辑。
API
接口层。领域层的入口,使用领域层的术语和对象。应该只向外暴露不可变对象。通常会从API层进行编码,每个方法就是一个骨架,并且对应一个High Level的功能性测试,驱动领域层的编码实现。
Infra
基础架构层。包含了对各种技术的适配器,如数据库、用户界面以及外部服务。它能否访问所有处于内部的层次,但多数操作是通过API层进行的。也负责实现领域层定义的某些接口,如Repository接口。
vs 整洁架构
by Robert C. Martin
blog.cleancoder.com/uncle-bob/2…
依赖规则
- 同心圆代表软件的不同领域。越向外,软件的级别越高。外圈是机制,内圈是策略。
- 内圈对外圈一无所知。内圈不应使用外圈的数据结构。
实体
企业业务规则或应用程序业务对象。封装了最通用和高级的规则,变化的最慢最小。
用例
包含特定于应用程序的业务规则。该层实现并封装了系统的所有用例,这些用例协调了所有进出实体的数据流,并使用实体使用其企业范围的业务规则来实现用例目标。
接口适配
格式转换。
框架和驱动程序
细节
四个圈?
不限制。
跨越边界
适配层的Controller使用用例层输入接口,用例层提供输入接口实现,然后用例层调用表现层接口来控制内向依赖的数据流动,表现层接口由适配层实现。
哪些数据跨越了边界?
基本的数据结构或DTO对象。隔离的简单的数据结构跨边界传递。当跨边界传递数据时,总是以方便内圈的形式出现。
架构特点:
- 框架解耦
- 可测试性
- UI解耦
- 数据库解耦
- 外部代理解耦