序
在本书中,Vaughn Vernon以一种特有的方式向我们展示了领域驱动设计(Domain-Driven Design,DDD)的各个方面,其中包括对新概念的解释、新的例子和原创的话题组织方式。我相信,这种新颖的方式可以帮助大家掌握DDD的各种微妙之处,特别是非常抽象的聚合和限界上下文。不同的人习惯用不同的方式来理解这些概念,而在缺少多种解释的情况下,想要了解这些微妙的抽象概念是非常困难的。
本书包含了在过去9年中出现在各种论文和讲稿中的对DDD的深层剖析,而这些是在之前的书籍中没有的。本书将领域事件与实体和值对象一道看作是模型的基础部件。另外,书中还讨论了“大泥球”(Big Ball of Mud)架构和如何将其放置在上下文映射图(Context Map)中。Vaughn还向我们阐述了六边形架构(Hexagonal Architecture),这种新兴的架构与分层架构相比,能够更好地描述我们要完成的事情。
我是在将近两年前第一次接触到本书内容的,那时Vaughn已经开始撰写本书有一段时间了。在第一次DDD峰会上,我们中的几个编写了关于DDD的若干话题,比如有关DDD的新知识,或者DDD社区所期待的一些针对性建议等。Vaughn负责写聚合部分,这一写便是一个有关聚合的文章系列,并且写得非常出色,最后,这个系列成为了本书中的一个章节。
在那次峰会上,与会人员们一致认为:一套更加具有规约性的DDD模式是大有裨益的。诚实地讲,对于软件开发中的任何问题,答案都是“得看情况”。然而,这对于那些希望学到实际应用技术的人来说却没多大用处。人们需要更加实际的指导。经验法则不见得一定要放之四海而皆准,但在通常情况下,他们可以工作得很好,也应该被首先尝试。出于自身的果决性,这些经验法则蕴含着解决问题的思想方法。Vaughn的这本《实现领域驱动设计》将各种明晰的建议很好地融合在一起,同时又给出了一些折中性的讨论,从而避免了将这些建议过于简单化。
一些额外的DDD模式,比如领域事件,已经成为了DDD的主流模式,人们也学会了如何应用这些模式,并尝试着在新架构和新技术中采用这些模式。在我的《领域驱动设计:软件核心复杂性应对之道》出版9年后,有太多关于DDD的新知识需要谈及,Vaughn的这本书则是最全面的阐述。
—Eric Evans
Domain Language, Inc.