领域驱动设计围绕着对象进行设计,类似于传统的OO,但是还是不同的。
传统的OO更像是贫血的领域对象,它具有数据,很多get set方法,但是缺少业务逻辑。客户端使用时,需要进行一大串的set操作。举个栗子:
这种方式中customer是一个贫血的领域对象,客户端必须进行很多的set,最后调用dao进行保存。
---------------
那么,怎样才是不贫血的领域对象呢?主要看两点:boundedcontext,通用领域语言。
领域对象是通过通用领域语言进行描述的,通用语言是领域专家和开发人员通用的语言。
-----------
使用通用语言是什么样的呢?假设一个护士给一个病人打疫苗的case,护士先算好量,再进行注射。有3种实现方式:不使用领域对象,粗糙的使用领域对象,正确的使用领域对象。如下图所示:
我们看到使用领域对象可读性是最好的。简而言之,领域对象的编程语言就是让领域专家,非程序员能读懂我们的代码。并且能看出系统的问题。
-------------
DDD的3个挑战:需要时间创建通用语言;需要领域专家支持;开发者需要改变思维方式。
------------------
DDD的实现方式和TDD类似:
- 模拟客户的代码;
- 创建领域对象使得测试通过;
- 重构直到领域对象的方法名表明了业务含义;
- 实现行为;
- 给领域专家展示;
最后领域专家可以通过阅读代码来理解程序。
时间: 2024-10-14 11:13:54