有人质疑 2003 年出版的《领域驱动设计》一书中的理念当今是否依然适用。在该书的作者 Eric Evans 看来,相比于 14 年前该书出版时,当前领域驱动设计(DDD,Domain-Driven Design)的理念更为适用。这是来自于 Evans 在 Explore DDD 大会上所作的开幕式主题演讲。Explore DDD 大会是首个聚焦于 DDD 的开创性大会,在北美的丹佛市举行。Evans 的报告依据软件开发的历史沿革,探讨了一些 DDD 的主要理念。比起我们过去所采用的方式,软件开放工具和技术范围在不断扩展,其中不少已经采用了 DDD 方式。Evan 指出:“DDD 不涉及具体的开发技术,但也并非对技术漠不关心”。
回顾 2003 年,那时我们所能使用的最先进技术,无非是 Java、J2EE、SQL 数据库和对象关系映射(ORM,Object-Relational Mapper),此外没有更多的选择。这样的选择面不广,导致了我们使用这些工具仅是因为这些工具是唯一可用的。Evans 举例说,ORM 并不适用于解决我们的所有事情,但依然被我们持续使用了十到十五年。Evans 称,他并非说对于某些情况任何工具和模式架构都不适用。而是对不分场合都仅有一套解决方案可用感到困惑。他相信,DDD 在过去的十四年间得到了发展,因此“如果在推行 DDD 时继续照本宣科《领域驱动设计》一书,这就不太光彩了”。
在 Evans 撰写《领域驱动设计》一书时,其中很多概念是难以用当时的工具所实现的。但时至今日,使用现代的平台实现已变为易事。Evans 特别强调了书中给出的“使值对象不可变”这一理念。这一理念曾非常难以做到,以至于被开发人员认为是不值得遵守的。但是情况已经发生了变化,函数编程语言让不可变更易于实现。与此同时,微服务的推进有助于标记上下文边界(Context Boundary),而 NoSQL 数据库提供了比关系数据库更好的聚合管理。这些进展使开发人员可以完全聚焦于解决复杂性问题,该问题是软件的核心问题。Evans 称赞这些进展为开发人员编写出完全表达模型的软件提供了方便。“如果技术能在此类事情上为我们提供支持,那么我们就可以聚焦于去给出更好的模型”。
软件开发中,妥协和权衡是不可避免的。Evans 鼓励所有人接受“并非所有的大型系统都会得到很好的设计”。根据“好篱笆造就好邻里”这一理念,受限上下文会使系统中好的部分免受不好部分的影响。我们可以做出合理的推理,即并非所有的开发都能处于良好定义的受限上下文中,同时并非每个项目都会遵循 DDD。开发人员常常会感慨,在工作中面对的是一些遗留系统。Evans 却对遗留系统给予了高度的评价,因为企业利润通常主要来自于这些遗留系统。他鼓励开发人员,“终究会有一天,你所开发的系统也会成为遗留系统”,希望到那时它会得到交口称赞。
开源软件也受到了 Evans 的推崇,尤其是作为一种学习方式时。Evans 在演讲中分享了他通过例子学习 Smalltalk 的经历。从案例中学习这一精神完全匹配 Explore DDD 大会的协同环境,大会中有三分之一的演讲是对真实世界案例研究,与会者分享了演讲者在实现 DDD 中的经验。
Evans 很高兴看到风向已转变为趋向优雅设计。《领域驱动设计》一书的撰写,正是为了解决如何面对系统无法扩展导致业务也不能扩展的这类问题。DDD 作为一种知我实现的需求,Evans 指出:“对更整洁设计的需求,终将创建更整洁的设计”。
查看英文原文: Eric Evans: Domain-Driven Design Even More Relevant Now
评论