这是一篇观点鲜明的文章——如果你愿意,也可以把它当作一篇吐槽。

一种正在蔓延的趋势

越来越多的软件开发者(包括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”,但实际上从不写测试。