领域驱动设计-入门

Posted 有目标并为之不懈努力终将收到回报!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了领域驱动设计-入门相关的知识,希望对你有一定的参考价值。

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

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

image

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

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

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

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

-----------

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

image

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

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

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

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

DDD的实现方式和TDD类似:

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

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

以上是关于领域驱动设计-入门的主要内容,如果未能解决你的问题,请参考以下文章

1.实现领域驱动设计 --- DDD入门

快速入门领域驱动设计(DDD)工作坊

秋雨喜凉好读书 – 小记9月8日“快速入门领域驱动设计工作坊”

DDD领域驱动设计-DDD概览

DDD简单入门

构建领域驱动设计知识体系