# 什么是领域驱动设计

程序开发通常被应用到真实世界中已经存在的自动化流程,或者给真实的业务问题提供解决方案,即要自动化的业务流程或者可以用程序解决的现实问题。从一开始,我们就必需明白程序脱胎于领域,并跟领域密切相关。

程序是由代码最终构成的。也许我们被代码所诱惑,在它上面花费了太多的时间,将程序看作是简单的对象或者方法。为了创建一个好程序,你必须知道这个程序究竟是什么。在你充分了解业务是什么之前,你是做不出一个好的业务系统的,你必须理解行业的领域。

在启动一个项目时,我们应该关注系统涉及的领域。系统的最 终目的是增进一个特定的领域。为了达到这个目的,系统需要跟要它服务的领域和谐相处。

我们怎样才能让系统系统和领域和谐相处呢?最佳的方式是让系统成为领域的反射(映射)。系统需要具现领域里重要的核心概念和元素,并精确实现它们之间的关系。系统需要对领域进行建模。

所以我们从领域开始着手。接下来要做什么呢?我们需要建立领域的抽象。当我们跟领域专家交流时,我们会学到好多领域知识,但这些未加工的知识不能被容易地转换成系统构造,除非我们为它建立一个抽象 —— 在脑海中建立一个蓝图。开始时,这个蓝图总是不完整的,但随着时间的推移,经过不断的努力,我们会让它越来越好,让它看上去越来越清晰。这个抽象是什么?它是一个模型,一个关于领域的模型。按照 Eric Evans 的观点,领域模型不是一幅具体的图,它是那幅图要极力去传达的 那个思想。它也不是一个领域专家头脑中的知识,而是一个经过严格组织并进行选择性抽象的知识。

模型是我们对目标领域的内部展现方式,它会贯穿设计和开发的全过程。在设计过程中我们记住并会对模型的很多方面进行引用。我们需要用领域模型来交流。领域驱动设计结合了设计和开发实践,展示了设计和开发如何协同工作以创建一个更好的解 决方案。