1、领域模型的重要性
领域模型是软件项目中的核心,模型是团队经过长时间的归纳总结形成的一个与项目有关的概念集合,他用术语和关系表达了领域的深层含义,这种关系和语义提供了模型语言的语义,模型语言是为领域独家定制的.十分的精确,并且他将开发过程和模型绑定到一起,并使代码和模型紧密的绑定.
但是还是要说一句,领域模型并非一张图或者一个表,他是所有能表达模型的手段的集合,可以是一张图、一段代码、一个文本文档、甚至可以是一段录音,只要内容和领域模型有关,那他就是领域模型的一部分.
2、模式
(1)、传统开发模式存在的问题
由于语言之间的鸿沟,领域专家和开发人员往往不能得到最初的领域模型,在一个没有公共语言的项目上,开发人员不得不和领域专家相互协作,努力的构建出第一个模型,但是这个过程很艰难,第一开发人员本身和领域专家之间的鸿沟,如果这个时候存在多个领域专家和多个开发人员,那么这个过程会更艰难,因为领域专家不得不为开发人员翻译其它领域专家的知识,这个翻译过程中间也可能存在问题,这一系列的问题,导致模型越来越模糊.甚至达到了语言支离破碎的地步,那么这个项目也就失败了.
(2)、领域模型的作用
所以我们必须对各种领域知识进行抽象,并形成一个领域专家和开发人员达成共识的一种语言。并将其总结成领域模型,持久化起来,形成一种通用的语言,通用语言包含类名称和主要操作,通用语言还包含一些高级的术语,有些术语知识普通的规则,有些术语则是施加在模型上的高级规则(后续的文章会介绍)。
模型之间的关系成为组合规则,将核心的模型串联起来.
最后在团队一直的努力下,开发人员通过基于模型的语言,来编写代码,领域专家使用他来讨论开发计划和需求,随着时间的推移,语言使用的越普遍,大家的理解就变得越来越深刻.这个过程就像我们学习外语一样,说的多了,自然就理解了.这个过程也是我们消化领域知识的过程,所以消化知识这个过程是依赖于语言的使用的.
而且随着我们对通用语言的理解的加深,就能发现其中的问题,这个时候就适当的修改,开发人员也去修改对应的类名称,或者代码,使他进一步的完善.
重点:我们必须认识到对领域通用语言的修改就是对我们的代码的修改,所以我们必须重视每次头脑风暴后的哪些影响现有代码设计和有歧义的地方,然后提出来,进行进一步的讨论.
3、最小化抽象领域
当每次头脑风暴过后,团队必须确定领域中的最小化抽象.这是领域驱动设计的基本要求.
4、解释性模型
作为一个C#开发,我往往希望使用类图来变现业务逻辑,像下面这样
但是类图无法展示一些操作的细节,这个时候我们就可以引入解释性模型,来更清楚的展示一些细节的操作,像下面这样:
通过将类图和解释性模型的结合,能同时满足开发人员和领域专家的需求,两者同时作为领域模型的一部分,使领域模型更加的容易理解.