DDD 代码一

DDD 学习笔记 | 极客时间 | 手把手教你落地 DDD

🏆 原文:10|代码实现(上):要“贫血”还是要“充血”?

贫血模型

贫血模型指的是领域对象中只有数据,没有行为,由于过于单薄,就好像人贫血了一样,显得不太健康。

这种风格违背了面向对象的原则。

富领域模型

领域对象里既包含数据,也包含行为

DDD 编程原则

现在包括 Martin Fowler 在内的很多人现在是编程范式的“中立主义者”,并不局限于面向对象,而是将面向对象、面向过程、面向方面、函数式等等编程范式结合起来。

根据目前国内多数人的编程习惯,在领域对象不直接或间接访问数据库的前提下,尽量面向对象

DDD 强调,在代码编写阶段,如果发现模型的问题,要及时修改模型,始终保持代码和模型的一致

“开卡”和“验卡”

  • 开卡:真正动手编码之前,找老王确认需求
  • 验卡:在代码开发完毕,正式提交测试之前,也会把领域专家或测试人员叫过来大体看一下有没有方向上的错误

和业务人员不断澄清需求,不断补充新的领域知识,正是 DDD 和敏捷软件开发的常态。

代码目录结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
.
├── adapter
│   ├── driving
│   │   └── restful
│   │       └── orgmng
│   │           └── EmpController.java
│   └── driven
│       └── persistence
│           └── orgmng
│               ├── OrgRepositoryImpl.java
│               └── entity
│                   └── OrgEntity.java
├── application
│   └── orgmng
│       ├── OrgDto.java
│       └── OrgService.java
└── domain
    └── orgmng
        ├── Org.java
        ├── OrgRepository.java
        ├── OrgStatus.java
        └── OrgType.java

一张图看懂依赖倒转

  • 箭头指向的是「被依赖方」
  • application 层的 OrgService 调用 domain 层的 OrgRepository 接口
  • adapter 层的 OrgRepositoryImpl 实现了 domain 层的 OrgRepository 接口

这个是精简版本,原文图更全

练习代码

仓库地址 branches 2

只实现了 Org save(Org org) 保存数据到 MySQL 功能,其他功能我也没有完全明白,后续再说

comments powered by Disqus