DDD 作者 Eric Evans 欲改进 DDD 设计语言

2019 年 9 月 28 日

DDD 作者 Eric Evans 欲改进 DDD 设计语言

领域驱动设计》作者 Eric Evans Explore DDD 主题演讲会上呼吁与会者积极参与改进用于复杂系统的建模和设计语言。Evans 承认,DDD 中使用的一些基本术语(例如有界上下文)经常被误解。其他短语(如“遗留软件”)由于个人偏见会导致在架构系统时效率低下。在提出了几个更清晰的语言选择之后,他希望其他人能够发表不同的观点。只有借助积极的社区和富有成效的辩论,我们才能让 DDD 成为“一个真正有生命力的思想体”。

Evans 认为,在他的书出版 15 年之后,也就是现在,可能是时候回到最基础的原则,并有意识地向前迈出新的一步。其中的一个关注点是澄清有界上下文、子域和组织这三个概念所导致的混淆。在很多情况下,一个有界上下文对应一个组织或团队,也可以对应一个子域。然而,大公司通常会进行重组,导致业务流程和职责发生变更。在发生这些重组时,软件并不会以同样的方式发生改变,因此功能管理变得不清晰。之前由一个组织承担的职责,现在需要两个组织通过协作来定义需求和优先级。Evans 拿这个与双人三腿赛跑作对比,要想在双人三腿赛跑中获胜,参与者需要在速度和协调性之间找到平衡。一个不协调的团队会输掉比赛,但一个协调的很好但速度慢的团队也不会赢。

他承认,近来 DDD 的复苏在很大程度上是由于微服务的兴起,因此他认为这是进行富有成效的对话的大好机会。Evans 反驳了人们只是在追随“微服务潮流”的观点,他认为,“微服务是打破障碍的攻城槌,在混乱中寻找机遇”。

“微服务是有边界的上下文”这句话经常被提及,但这种说法过于简单化了。Evans 描述了微服务系统中的四种上下文类型:

  1. 在服务内部;
  2. 服务 API;
  3. 服务集群;
  4. 服务之间的交互。

随着上下文类型的增加,我们也需要从狭窄和集中式的思维转向更为广阔的架构视角。如果每个微服务都可以独立定义一种用于跨系统通信的语言和消息,而不全盘考虑架构,那一定会出现混乱。

Evans 还想要重新定义什么是遗留系统,并让人们能够更有效地讨论它们。Evans 拿花园作为比喻,一个新花园有很好的秩序感,但夏末的花园才有“丰富的成熟度”,这就是花园的价值所在。类似地,开发人员和架构师应该以创建秩序为目标播下种子,但也要欣赏成熟的系统中存在的丰富的混沌。

除了“遗留系统”,Evans 提议可以用更多其他新的方式来分类和描述“成熟上下文”。在应用 DDD 时,需要理出系统的上下文和上下文之间的关系。确定成熟的上下文可以处理的枯燥职责,帮你与总是从头开始的人性本能作斗争,就像一个成熟的花园已经富有成效一样。Evans 指出,反腐败层是双向的,它们保护新代码不受遗留系统的影响,同时还会让遗留系统不受新代码的影响。

在处理被称为大泥球的系统的代码时,需要注意的是,并不是系统的所有部分都设计得很好。一旦系统变得足够大,你就无法回到整洁的世界。相反,我们的目标应该是从良好的边界和隔离上下文从获得好处。

原文链接

Eric Evans Wants to Improve the Language of DDD

2019 年 9 月 28 日 08:00 1618
用户头像

发布了 731 篇内容, 共 352.6 次阅读, 收获喜欢 1786 次。

关注

评论

发布
暂无评论
发现更多内容

Leetcode 556. Next Greater Element III

隔壁小王

算法

《零基础学 Java》 FAQ 之 5-如何在IntelliJ IDEA里配置JDK

臧萌

Java jdk intellij

工作原则:决策要基于数据的支撑

Janenesome

高效工作 思考 原则

不要做软件开发团队中打破窗户的那个人

程序员小岑

程序员 思考 感悟 软件开发 团队

Web3极客日报#129

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

大一到大三总结

迷羊

学习 经历

测试开发专题:spring-boot自定义返回参数校验错误信息

测试轩

Spring Boot 测试

LeetCode 781. Rabbits in Forest

liu_liu

LeetCode

“我XXXX,还能学编程吗?”

三号无名指

编程 工具 入门 转行程序员

Python3.6.1官方文档练习——初入江湖(二)

Sicolas Flamel

我画了35张图就是为了让你深入 AQS

一枝花算不算浪漫

AQS jdk源码

《零基础学 Java》 FAQ 之 6-Java里Bean这个名字怎么来的

臧萌

Java java-ee spring

十大经典排序算法总结

淡-蓝色

Java 算法 计算机基础 排序

VSCode 集成 Haskell 环境

liu_liu

vscode haskell hie Haskell Language Server

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (八)好单元测试的特质

编程道与术

Java 编程 软件测试 TDD 单元测试

webpack入门系列之二——插件使用及热更新打包

子铭

Web

Web3极客日报#141

谢锐 | Frozen

区块链 独立开发者 技术社区 Rebase Web3 Daily

克服恐惧,勇于分享

孙苏勇

程序员 分享 工作

要做医生,不要做卖药的

Janenesome

高效工作 思考 沟通

Redis实现热卖商品排行榜

北漂码农有话说

redis

MySQL安全-审计

一个有志气的DB

安全 MySQ

看完这篇,你也是字符编码大神(ASCII、Unicode、UTF-8、UTF-16、UTF-32)

Meandni

Java 面试 Unicode utf-8 utf-16

识别代码中的坏味道(一)

Page

Java 面向对象 重构

LeetCode 513. Find Bottom Left Tree Value

liu_liu

LeetCode

职涯思考

Kevin Z

职业 思考 工程师思维 硬件 工程师

Binlog2sql恢复误删除的数据

一个有志气的DB

MySQL 安全 数据

香港科技大学与OSL海科签订无毒海洋防污技术独家授权协议

极客编

当你不被尊重的时候,才会想起去尊重别人

小天同学

人生 个人成长 感悟

程序员小白的个人思考

程序员小岑

程序员 职场 思考 感悟

玄铁重剑,我用过最贵重的键盘

池建强

ipad 苹果 键盘

修改网桥默认地址

奔跑的菜鸟

Docker

DDD 作者 Eric Evans 欲改进 DDD 设计语言-InfoQ