DDD架构【认知篇】

482 阅读2分钟

DDD架构

定义

Domain Driven Design,领域驱动设计

本质

  • 业务和技术解耦,业务变动和技术变动独立演进
  • 细节依赖抽象,细节对抽象透明

vs 洋葱架构

洋葱架构有时也被称为端口和适配器架构,或者是六边形架构。不过Wade认为,后者应该是洋葱架构的一个超集。 重要概念:依赖。外层依赖内层,外层对内层透明。

image.png

Core

核心层。领域或技术无关的基础通用构件,不包含任何技术层面的概念,如数据库、Rest等

Domain

领域层。定义业务逻辑。

API

接口层。领域层的入口,使用领域层的术语和对象。应该只向外暴露不可变对象。通常会从API层进行编码,每个方法就是一个骨架,并且对应一个High Level的功能性测试,驱动领域层的编码实现。

Infra

基础架构层。包含了对各种技术的适配器,如数据库、用户界面以及外部服务。它能否访问所有处于内部的层次,但多数操作是通过API层进行的。也负责实现领域层定义的某些接口,如Repository接口。

vs 整洁架构

by Robert C. Martin

blog.cleancoder.com/uncle-bob/2…

image.png

依赖规则

  • 同心圆代表软件的不同领域。越向外,软件的级别越高。外圈是机制,内圈是策略。
  • 内圈对外圈一无所知。内圈不应使用外圈的数据结构。

实体

企业业务规则或应用程序业务对象。封装了最通用和高级的规则,变化的最慢最小。

用例

包含特定于应用程序的业务规则。该层实现并封装了系统的所有用例,这些用例协调了所有进出实体的数据流,并使用实体使用其企业范围的业务规则来实现用例目标。

接口适配

格式转换。

框架和驱动程序

细节

四个圈?

不限制。

跨越边界

适配层的Controller使用用例层输入接口,用例层提供输入接口实现,然后用例层调用表现层接口来控制内向依赖的数据流动,表现层接口由适配层实现。

哪些数据跨越了边界?

基本的数据结构或DTO对象。隔离的简单的数据结构跨边界传递。当跨边界传递数据时,总是以方便内圈的形式出现。

架构特点:

  • 框架解耦
  • 可测试性
  • UI解耦
  • 数据库解耦
  • 外部代理解耦