DDD领域驱动设计批评文集
做强化自测题获得“软件方法建模师”称号
《软件方法》各章合集
警惕DDD圈子借着“AI时代新方法学”的契机,把一些伪创新打成(塑造成)“传统软件工程最佳实践”。
如果有人说:
浑元太极马老师不行了。想当年,他第一次打自由搏击就得了冠军,连续三年打败所有日本空手道高手,浑元太极被誉为空手道的克星。可惜,他接下来沉溺于抽烟、喝酒、烫头等不良嗜好,现在连八岁小孩都打不过。

你猜,马老师听到这个是觉得高兴还是不高兴?如果我是马老师,我是很高兴的,因为这段批评马老师的话默认了当年马老师的辉煌。如果流传下去,下一代、下下一代心里的马老师形象不说是搏击界的马拉多纳,至少也是乔治·贝斯特或罗纳尔迪尼奥。
又如,有人像下面这样“批评”领域驱动设计:

这样的“批评”默认了“DDD能应对复杂逻辑”——这个药不能让你长生不老,但可以让你的癌症治愈。美滋滋!
我在《软件方法》第1章里评价了“DDD能应对复杂逻辑”的宣传:
接下来开始举例了,但例子只有1-2个领域类,涉及的领域逻辑也极其简单(也许在DDD圈子看来已经够复杂),然后就开始大谈实体、值对象、仓储、上下文、聚合根、六边形架构……还会给出代码,代码一层又一层,颇为壮观。一点点领域逻辑,包出这么多饺子,难怪伪创新买家(开发人员)会大喊“受用”!
……
这是令人感到讽刺的。
既然以“领域驱动设计”为名,按道理应该是领域逻辑越复杂的系统越需要“领域驱动设计”,但领域驱动设计“大行其道”的地方却是面向大众的互联网公司,鼓吹者所举例子的领域逻辑也非常简单,从内容上看,鼓吹者也不像是掌握了面向对象建模方法。
**********
前两天,有同学给我推送了一篇公众号文章《反思软件工程,超越Vibe Coding》,里面有这样一个表格:

好家伙,“软件工程”原来说的是这个?DDD、Ubiquitous Language成了“传统方法论最佳实践”,谁给封的?
之前,我批评过DDD圈子用“DDD的”、“领域驱动设计的”、“DDD提出”、“领域驱动设计提出”的话术来模糊历史:

有的甚至写在书里面,例如,下图截自张逸的《解构领域驱动设计》:

图中的“他”指Eric Evans。
迭代式开发的历史可参考:
Iterative and Incremental Development: A Brief History
https://ieeexplore.ieee.org/document/1204375/
像下面这本1983年出版的C语言教程都有写:


如果懒得去翻这些,翻翻《人月神话》,里面也有啊!
这个地方也许作者知道,只是表述不当,但《解构领域驱动设计》中的其他地方就不好解释了:

作者说“值对象”是Eric Evans命名的。
其实,Martin Fowler和Kendall Scott在1997年的“UML Distilled”第1版中,就使用了value object:

(注:只是说Fowler等人在1997年使用,仅从网络可得的资料无法考证“value object”是谁先用的。)
更早也更合理的叫法是“值类型(value type)”,例如Klaus-Dieter、Ole-Johan Dahl(Simula、图灵奖)等在1992年的文献:

(注:同上,仅从网络可得的资料只能说明1992年存在,无法考证“value type”是谁先用的。)
还有像这个:

“Code smell”是Kent Beck说的,《重构》传播了这个造词。Kent Beck又说,是他的朋友说的(https://tidyfirst.substack.com/p/code-smells)。我猜想,如果认真去溯源,有可能这样的说法在Kent Beck的朋友之前就有了。感兴趣的读者有时间可以去试试。
如果作者说的是《重构》里面的内容,那更不是Fowler提出的了,我在《Martin Fowler是"重构之父" 吗》一文有详细说明。
总之,本文写作的目的是希望大家警惕《反思软件工程,超越Vibe Coding》的类似话术,借着“AI时代新方法学”的契机,把一些伪创新塑造成“传统软件工程最佳实践”。
DDD圈子的宣传力量是非常强劲的。前几天我还发了一个视频,感慨我的幻灯片被强行解释成DDD话语(应该是AI生成),这些内容在我的幻灯片里根本不存在!

网硕互联帮助中心





评论前必须登录!
注册