领域驱动设计
2020年4月22日
领域驱动设计是一种软件开发方法,它将开发重点放在对领域过程和规则有深刻理解的领域模型编程上。这个名字来自埃里克·埃文斯在2003年出版的一本书,该书通过模式目录描述了这种方法。从那时起,一个实践者社区进一步发展了这些想法,催生了各种其他书籍和培训课程。这种方法特别适合于复杂的领域,在这些领域中,需要组织大量通常很混乱的逻辑。
软件系统需要基于经过良好开发的领域模型的想法,至少在我进入这个行业的时候就存在了。我从吉姆·奥德尔那里学到了很多这种思维方式,他与数据建模、信息工程和面向对象分析一起发展了这种思维方式。在整个1980年代和1990年代,数据库和面向对象社区的大量工作中,表示底层领域都是一个关键部分。
埃里克·埃文斯通过他的书对这一点做出了巨大的贡献,他开发了一种词汇来谈论这种方法,并确定了超越当时主导讨论的各种建模符号的关键概念元素。其核心是,为了开发针对复杂领域的软件,我们需要构建一个通用语言,将领域术语嵌入到我们构建的软件系统中。虽然许多人谈论开发这样的模型,但它们通常只在纸面上完成,并且通常期望在前期完成。DDD 强调在软件中完成它们,并在软件产品的生命周期中不断发展它们。埃里克是极限编程的坚定支持者,他认为领域驱动设计是极限编程方法的自然组成部分——这是我认识的大多数 XP 从业者所认同的观点。
这本书引入了将对象分类为实体、值对象和服务对象的概念——我称之为埃文斯分类,并确定了聚合的概念。我发现这些填补了对对象思考的重要空白,这些空白既困扰着编程语言也困扰着图表符号。DDD 的一个特别重要的部分是战略设计概念——如何将大型领域组织成限界上下文网络。在那之前,我还没有看到任何人以任何令人信服的方式解决这个问题。
虽然埃里克的背景植根于面向对象社区,但领域驱动设计的核心概念是概念性的,因此适用于任何编程方法——对于战略设计方面来说尤其如此。
进一步阅读
埃里克的原著以难以阅读而闻名,但我真诚地相信它值得付出努力,并且应该放在任何严肃的开发人员的书架上。 沃恩·弗农的2013年著作是下一步的好选择,它描述了一些后来的思考,并特别关注战略设计方面。