领域驱动设计-入门

领域驱动设计围绕着对象进行设计,类似于传统的OO,但是还是不同的。

传统的OO更像是贫血的领域对象,它具有数据,很多get set方法,但是缺少业务逻辑。客户端使用时,需要进行一大串的set操作。举个栗子:

image

这种方式中customer是一个贫血的领域对象,客户端必须进行很多的set,最后调用dao进行保存。

---------------

那么,怎样才是不贫血的领域对象呢?主要看两点:boundedcontext,通用领域语言。

领域对象是通过通用领域语言进行描述的,通用语言是领域专家和开发人员通用的语言。

-----------

使用通用语言是什么样的呢?假设一个护士给一个病人打疫苗的case,护士先算好量,再进行注射。有3种实现方式:不使用领域对象,粗糙的使用领域对象,正确的使用领域对象。如下图所示:

image

我们看到使用领域对象可读性是最好的。简而言之,领域对象的编程语言就是让领域专家,非程序员能读懂我们的代码。并且能看出系统的问题。

-------------

DDD的3个挑战:需要时间创建通用语言;需要领域专家支持;开发者需要改变思维方式。

------------------

DDD的实现方式和TDD类似:

  1. 模拟客户的代码;
  2. 创建领域对象使得测试通过;
  3. 重构直到领域对象的方法名表明了业务含义;
  4. 实现行为;
  5. 给领域专家展示;

最后领域专家可以通过阅读代码来理解程序。

原文地址:https://www.cnblogs.com/alphablox/p/5309030.html