第1章 DDD的关键概念
开发大型软件最难的部分并不是实现,而是要深刻理解它所服务的现实世界的领域。领域驱动设计(Domain-Driven Design,DDD)是一种处理高度复杂领域的愿景(Vision)和方法,它主张在软件项目中把领域本身作为关注的焦点,维护一个对领域有深度认知的软件模型。这个愿景和方法,经由建模专家Eric Evans于2004年出版的其最具影响力的著名图书Domain-Driven Design:Tackling Complexity in the Heart of Software[1](简称DDD)正式面世。
部分开发人员是不是觉得这段话不太好理解?
也许大家可以先思考一个问题:为什么命名是程序员公认的软件开发中最艰巨的任务?Quora网站曾进行“最挑战程序员的任务”的投票,半数程序员认为最难的事情是“Naming things”。排在第二位的是“Explaining what I do(or don't do)”,其得票数大约只是前者的一半。
其实命名的困难只是表象,构建领域模型的困难才是根本。比如说,“对象”的名字代表着它的职责,你只有把一个对象应该干什么想清楚了,才能给它起一个恰当的名字。“对象应该干什么”,这是一个领域建模问题。
我们可以在网上免费获取该书的缩写精简版Domain-Driven Design Quickly[2],在InfoQ中文站中,有这个英文精简版对应的中文翻译版本[3]。
关于DDD的关键概念,还可以参考维基百科的相关词条[4]。
领域驱动设计(DDD),其实就是以领域模型驱动软件设计。要理解DDD,关键是理解什么是DDD所指的领域模型,但在此之前,还是应该先认识一下软件开发的过程。然后,基于此认识重温一下DDD在战术以及战略层面的若干关键概念。
本章的最后会简单探讨一下软件开发团队经常接触到的几种模型范式,帮助理解DDD模型和它们的关系。
[1] Eric Evans. Domain-Driven Design: Tackling Complexity in the Heart of Software. Addison Wesley, 2003. 见https://www.amazon.com/exec/obidos/ASIN/0321125215/domainlanguag-20。
[2] Floyd Marinescu & Abel Avram. Domain-Driven Design Quickly. C4Media, 2007. 见https://www.infoq.com/minibooks/domain-driven-design-quickly。
[3] 领域驱动设计精简版(全新修订), https://www.infoq.cn/article/domain-driven-design-quickly-new。
[4] Domain-Driven Design, https://en.wikipedia.org/wiki/Domain-driven_design。