领域模型的本质是代码,使用代码来描述软件需要实现的业务。领域模型是具体的,需要使用特定的编程语言来实现。领域模型可以被测试,可以被验证,最终作为软件的一部分在生产环境运行。所以,与业务的其他描述方法相比,领域模型不存在二义性。
然而,领域模型的优点也是不足:针对具体软件的代码往往不够抽象,不利于更高层次的复用。如果我们希望将某个C#编写的软件使用Java重新实现,那么即使业务完全没有变化,领域模型也无法复用。更高层次的复用需要进行抽象,并且与具体的编程语言无关,这就是分析模型。分析模型经常用于领域模型的创建过程,帮助进行思考,但分析模型不能作为软件实现的依据,因为分析模型不能测试,也无法有直接验证的手段。分析模型可以帮助理解业务,但需要结合自然语言为主的通用语言或者BDD测试脚本,才可以比较精确地描述业务。领域模型的非代码方式描述是系统分析的一个需要突破的难点。
分析模式比具体软件的分析模型更为抽象,描述某一个特定领域的解决方案。分析模型是全面的具体的,针对具体的软件,分析模式是局部的抽象的,一个分析模型中往往包括若干分析模式。分析模式粒度较小,可以使用各种编程语言比较容易地实现,所以通用性更强。