张逸

读完需要

5

分钟

速读仅需 2 分钟

领域驱动设计专家,曾就职于 ThoughtWorks,作为 Lead Consultant 为客户提供架构设计、大数据分析、持续交付、代码质量、敏捷管理等咨询服务。著译作包括《软件设计精要与模式》、《WCF 服务编程》、《Java 设计模式》、《恰如其分的软件架构》、《人件》等。新书《解构领域驱动设计》即将完稿。

本次演讲是张逸老师创作 GitChat 课程「领域驱动战略设计实践」和「领域驱动战术设计实践」这两年来,随着对领域驱动设计的深度理解,结合自身项目经验总结的领域驱动设计知识体系。

本次演讲内容分为四个部分:

  • 领域驱动设计的历史回顾

  • 对领域驱动设计的新定位

  • 领域驱动设计参考过程模型

  • 领域驱动设计能力评估模型

1

领域驱动设计的历史回顾

从 2004 年 Eric Evans 的经典著作《领域驱动设计》出版开始,在这十五年间,我个人认为有四个重要的里程碑值得重视。

里程碑之一:领域驱动设计的诞生

里程碑之二:领域事件的引入

它的重要意义在于拓宽了领域驱动设计的建模范式,引入了以“事件”和“函数”为核心的新的领域驱动设计模式,如 Event Store、Event Sourcing、Pure Function 等:

架构模式也发生了变化:

里程碑之三:微服务的引入

毫无疑问,微服务概念以及该架构模式的产生与发展,对领域驱动设计产生了深远的影响。它的引入对企业应用系统的设计与开发带来了各方面的影响。

首先是设计理念的改变。传统的数据模型驱动设计并不适合微服务架构。例如,那种以数据库 SQL 或存储过程操作数据的方式,在微服务架构下已经不具备优势:

其次,领域驱动设计引入的限界上下文边界与聚合边界更适合微服务架构:

通过防腐层(ACL)与开放主机服务(OHS)维护好限界上下文的边界,有利于单体架构向微服务架构的迁移:

领域驱动设计强调领域模型与数据模型的分离,在从单库单表的数据结构迁移到多库多表时,领域模型受到的影响较小,同样有利于单体架构到微服务架构的迁移。

在 2017 年的 DDD 中国峰会,我对肖然笑称是“微服务拯救了领域驱动设计”,但这个说法其实比较过分,因为领域驱动设计并没有岌岌可危,只是并未成为国内软件开发的主流而已,因而我改为一个更加温柔的说法:微服务让领域驱动设计焕发了青春。

但是,到了 2019 年的今天,我却要改变这一说法:不是微服务让领域驱动设计焕发青春,而是微服务“爱上了”领域驱动设计,二者其实是天作之合。

里程碑之四:中台战略的引入

ThoughtWorks 的王健将微服务定义为:企业级能力复用平台。我很认同这一定义,如果仔细分析这九个字的定义,也可以从领域驱动设计中找到映射。

首先,领域驱动设计中问题空间的子领域和解决方案空间的限界上下文就体现了企业级能力:

其次,领域驱动设计强调将领域层独立出来,即可形成对领域模型的复用:

领域驱动设计的四重边界与整洁架构思想的遵循,可以帮助我们更好地完成平台的沉淀:

中台战略(Zhongtai Strategy)是否能够更好地与领域驱动设计结合,或许答案还未可知,但我们可以对其进行探索。

2

对领域驱动设计的新定位

我认为领域驱动设计从最初的一种技术体系,到现在已经发展成了一种设计哲学:

为此,我建立了领域驱动设计魔方,分别从 X、Y、Z 三个维度对领域驱动设计进行了梳理:

我基于 Y 轴划分的宏观层次、微观层次与纳米层次分别介绍了领域驱动设计魔方:

在领域驱动设计魔方中,我引入了业务架构、系统上下文、事件风暴、整洁架构、RAID 风暴、RUP 4+1 视图、康威定律、精益需求管理、敏捷过程管理、场景驱动设计、测试驱动开发和测试战略。这些内容在 PPT 中都有介绍,这里就不再赘述。

3

领域驱动设计参考过程模型

固化领域驱动设计的过程,提供简单有效的实践方法,建立具有目的性和可操作性的研发过程。

在全局分析阶段,参考过程模型的实践包括:

在战略设计阶段,参考过程模型的实践包括:

如果当前限界上下文属于核心子领域,则应该为该限界上下文开展领域模型驱动设计,这一阶段的参考过程模型包括:

4

领域驱动设计能力评估模型

借助领域驱动设计魔方与领域驱动设计参考过程模型引入的各种方法与模式,我建立了一套领域驱动设计能力评估模型。

领域驱动设计能力评估模型(Domain-driven design Capability Assesment Model, DCAM)是我个人对领域驱动设计经验的一个提炼,可以通过它指导团队进行能力的培养和提升。

DCAM 并非一个标准或一套认证体系,更非事先制定和强制执行的评估框架。建立这套模型的目的仅仅是为了更好地实施领域驱动设计,它是一个能够不断演化的评估框架。

该能力评估模型针对的能力维度包括:

  • 敏捷迭代能力

  • 领域建模能力

  • 架构设计能力

  • 整洁编码能力

敏捷迭代能力

领域建模能力

架构设计能力

整洁代码能力

领域驱动设计的落地取决于一个成熟的领域驱动设计团队。利用 DCAM 对团队进行评估,在发现团队成员的能力短板后进行针对性的培训,一旦提升了整个团队的成熟度,在领域驱动设计的精髓指导下,距离领域驱动设计的成功就不远了!

- EOF -

微服务架构~BFF和网关是如何演化出来的2020-10-06

这十年,阿里开发者毕玄的日常2020-10-05

天弘基金首席架构师李鑫:微服务接口限流的算法及架构实现2020-10-04

   END
#架构师必备#

点分享点点赞点在看

DDD专家张逸:构建领域驱动设计知识体系相关推荐

  1. 读张逸的领域驱动设计笔记

    2019独角兽企业重金招聘Python工程师标准>>> 张逸的<领域驱动战略设计实战>地址,付费的,价格¥59,还能接受. 领域驱动设计可能会给你带来的收获,下面几点来自 ...

  2. 读张逸的领域驱动设计之应对软件复杂度笔记

    2019独角兽企业重金招聘Python工程师标准>>> 张逸的<领域驱动战略设计实战>地址,付费的,价格¥59,还能接受. Eric Evans认为"很多应用程 ...

  3. DDD专家张逸:《解构领域驱动设计》前言

    张逸 读完需要 5 分钟 速读仅需 2 分钟 述说撰写<解构领域驱动设计>一书的心路历程,三年磨一剑的认真态度与艰辛苦楚,如今写作完毕,也算是苦尽甘来.本书将由人民邮电出版社异步图书社区出 ...

  4. DDD专家张逸:复杂与架构演进的关系

    图 张逸 读完需要 25 分钟 速读仅需 5 分钟 张逸,架构编码实践者,IT 文艺工作者,大数据平台架构师,兼爱面向对象与函数式程序设计,热衷于编程语言学习与技艺提升,致力于将主流领域驱动设计(DD ...

  5. ddd 企业应用架构模式_灵魂拷问:用了DDD分包就是落地了领域驱动设计吗?谈谈DDD本质...

    学习DDD的时候,作为开发,我们更关心它在技术层面的东西,尤其体现在DDD的分包方式.编码技巧等方面. 自然的,我们不禁发问,用了DDD的分包,就是实践落地了DDD了么? 不卖关子,直接说答案,并不是 ...

  6. DDD领域驱动设计-知识消化

    在传统的瀑布方法中,业务专家与分析员进行讨论,分析员消化理解这些知识后,对其进行抽象并将结果传递给程序员,再由程序员编写软件代码.由于这种方法完全没有反馈,因此总是失败.分析员全权负责创建模型,但他们 ...

  7. 领域驱动设计(DDD)前夜:面向对象思想

    面向对象 面向对象是一种对世界理解和抽象的方法.那么对象是什么呢? 对象是对世界的理解和抽象,世界又代称为万物.理解世界是比较复杂的,但是世界又是由事物组成的. 正是这样的一种关系,认识事物是极其重要 ...

  8. 京东平台研发朱志国:领域驱动设计(DDD)理论启示

    朱志国 平台研发 读完需要 33 分钟 速读仅需 11 分钟 过去几年,通天塔一直处于快速的业务能力建设和架构完善的阶段,以应对不断增长的业务需求和容量.高可用等技术需求,现在通天塔平台已经能满足集团 ...

  9. 阿里文娱技术专家战獒: 领域驱动设计详解之What, Why, How?

    战獒 阿里文娱技术专家 读完需要 8 分钟 速读仅需 3 分钟 阿里妹导读:什么是领域驱动设计?传统分层架构在实际开发中存在哪些问题?业务开发人员如何设计并搭建自己的领域模型?阿里文娱技术专家战獒将为 ...

最新文章

  1. python——图像处理3(均值偏移、改变亮度、图像修复、图像融合)
  2. rails设置表单默认值amp;amp;隐藏表单
  3. golang中的TestMain
  4. 满足什么条件的两个量才可以被分类?
  5. 二进制图片在http怎么显示_HTTP/2内核剖析
  6. 并发工具类(一)等待多线程完成的CountDownLatch
  7. CRM order lock will trigger product read API
  8. python 服务端性能_python 学习笔记---Locust 测试服务端性能
  9. LeetCode 1455. 检查单词是否为句中其他单词的前缀
  10. wdcp支持两种安装方式
  11. php 序列化 java_JAVA之序列化
  12. Java使用HttpURLConnection上传文件
  13. JUC与JVM并发编程学习笔记01
  14. CSS实现文字半透明显示在图片上方法
  15. commit rollback操作产生undo和redo?
  16. python采集微信聊天信息_我用 Python 破解了微信聊天记录,自动同步微信文章
  17. 微博相册图片获取工具
  18. 设计模式读书笔记汇总
  19. android 指针越界,android sqlist中游标下标越界问题解决方案
  20. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三银四,直通大厂(Java篇)

热门文章

  1. mysql root命令_设置更改root密码、连接mysql、mysql常用命令
  2. python爬虫下载模块_python爬虫系列(4.5-使用urllib模块方式下载图片)
  3. updatebyprimarykeyselective怎么更新某个字段为null_一千个不用 Null 的理由
  4. 锁 唤醒_Java笔记|等待唤醒机制
  5. 计算机组成原理艾列富,理论结合实验的计算机组成原理课程教学措施初探.pdf...
  6. KVM虚拟机搭建增量镜像(一个基本镜像拷贝成无数多个子镜像)
  7. Python 参数传入sys.argv和getopt.getopt()的用法
  8. 栈的链式存储结构及实现
  9. 1070 Bash游戏 V4
  10. [芯片] 2、接口技术·实验二·定时/计数器8253