这是一篇观点鲜明的文章——如果你愿意,也可以把它当作一篇吐槽。
一种正在蔓延的趋势
越来越多的软件开发者(包括AI智能体)把领域驱动设计(DDD)理解为一套编程模式和抽象工具的集合:
打开网易新闻 查看精彩图片
- 实体(Entities)
- 聚合(Aggregates)
- 仓储(Repositories)
- 工厂(Factories)
- 服务(Services)
- 值对象(Value Objects)
- 限界上下文(Bounded Contexts)
- 领域事件(Domain Events)
你在所有社交平台上都能看到这种观点。一个自称“拥有3年经验”的开发者兼内容创作者,摇身一变成了分布式微服务+DDD专家,能把实体、聚合、仓储讲得头头是道,顺带还给你加餐一份“分布式微服务”豪华套餐。
热门学习平台的课程也差不多。某平台一门DDD课程的简介是这么写的:
- 围绕领域和实体组织你的应用。
- 建立聚合类并确定适当的行为。
- 通过事件和命令与你的领域交互。
这种把DDD窄化成代码模式集合的看法,我完全不同意。
先问两个问题:
- 不使用战术工具,能做DDD吗?
- 不使用战略工具,能做DDD吗?
第一个问题:能。
第二个问题:不能。
战术工具是可选的
Vaughn Vernon在《实现领域驱动设计》(俗称“红书”)里写道:
DDD关乎讨论、倾听、理解、发现和业务价值——所有这些努力都指向一个核心:集中知识。
如果你没在做这些事情,你就没在做DDD。句号。
Vaughn还写了一个虚构场景:一群开发者只盯着战术工具,他把这种做法称为“DDD-Lite”:
事实上,他们用的不过是DDD-Lite,使用战术模式主要是为了技术上的回报。
换句话说,你有多少个实体、聚合、工厂、服务、仓储,根本不重要。
顺带一提:这就好比有人说自己“在做TDD”,但实际上从不写测试。
热门跟贴