Eric Evans:领域驱动设计有利于软件开发吗?

  • Jan Stenberg
  • 禚娴静

2016 年 6 月 20 日

话题:语言 & 开发架构

Eric Evans最近在伦敦举办的DDD eXchange 大会上做了一次主题演讲。他在演讲中指出,过去的几年中,对领域驱动设计(DDD)的兴趣有所增加。他认为,我们正处在一个开发人员更关注设计的时代,部分原因是因为我们更多的工作在分布式系统上,而其中的模型具有较高的价值。

Evans 认为,DDD 仍然有意思的其中一个原因是,因为我们质疑它潜在的假设,并取得了一些不错的结果。挑战它的一种方法是问如下这样的问题:

  • DDD 是否有助于我们以某种定义的方式更快或者更好地交付软件?
  • DDD 是否有助于我们适应?我们可以将同样的原则应用在过去 10 年已经发生根本变化的 IT 世界吗?
  • 那些 DDD 原则是否有助于我们创新?我们现在做软件设计比以前好了,是因为现在这些原则帮助我们找到新的做事方式了?

DDD 的原则依赖我们以一定的方式考虑模型。但是以 Evans 的经验,人们往往将领域模型简化为 UML 图。虽然数据结构是一个重要方面,但这不是他用模型来参照的东西;各种动态方面也是重要的。完整性或现实的描述不是目的;一个模型应该有一个小范围的关注点,并在一些特定的方法上是有用的。他用Mercator 投影来作比较:Mercator 投影是专为航海而创造的世界模型,但对于其他目的并不是特别有用。

经常,Evans 发现,人们试图创造一个如此优雅的模型使得一步就可以到达那里的时候,他们就会卡住。相反,他认为,我们应当交付那些一开始并不那么好的模型,并开始使用它们。然后,我们可以学习并创造越来越好的模型,直到最终发现那个可以引以为豪的模型。

Evans 强调我们不应该局限于模型看起来的样子。他对模型的观点包括许多不同的模型范式:

  • 关注于事物的面向对象会反过来带出行为。这是 Evans 写他的关于 DDD 一书时的主要技术。
  • 事件溯源,其中事件发生的顺序成为中心而事物都是次要的。它有许多优点也有一些缺点。Evans 指出,面向事件的建模似乎也能很好的适用于许多业务流程。
  • 关系是一系列适合问题的面向集合的模型,其中许多事物互相比较或互相关联。Evans 指出我们应当使用它本来的意图,而不仅仅是存储面向对象数据的一个坏方法。

Evans 认为 DDD 有助于我们创新的一个例子是事件溯源。它是领域建模的一种不同风格,也是建模思想从关注数据结构的变化到所发生事情的转变。在一定的领域里,与已经发生事情的相关离散事件可能是非常有价值的。

Evans 提到的另一个例子是事件风暴,这种技术在近年来已经产生一些影响。它是以发生在领域上下文中的事件开始,并寻找作为基础元素的事件。他认为事件风暴和事件溯源这两种技术都可以和事件一起工作,当一起使用的时候可能会产生积极的影响。

明年的 DDD Exchange定于 2017 年 4 月下旬,大会的注册已经开始。

查看英文原文Eric Evans: Is Domain-Driven Design Beneficial for Software Development?


感谢张龙对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们。

语言 & 开发架构