什么是领域模型

领域模型是我们对客观世界的主观反映,反映问题域(业务领域)的组成、结构、规则、行为和机制。

问题域与解决方案域

我们知道,软件行业在大多数情况下都是为其他行业开发自动化的解决方案。我们身处两个领域:一个领域是业务领域(客户之所在),另一个是技术领域(我们之所在)。在计算机科学中,前者被称为“问题域(Problem Domain)”,后者被称为“解决方案域(Solution Domain)”。软件开发就是使用解决方案域中的各种技术解决客户问题域中的问题。

对软件开发来说(对其他行业也一样),成功的标准有两条:

  • 做正确的事(Do the RIGHT thing);
  • 正确地做事(Do the thing RIGHT)

如果客户需要画一只老虎,但是你给他画了一条狗,即使你把狗画得栩栩如生(Do the thing RIGHT),却不是客户需要的(Do the WRONG thing),那么这幅画就是彻底失败了。

与其他行业相比,软件开发有一个特殊性:我们是为其他行业提供自动化解决方案。我们不但要掌握编程语言、类库、框架、工具、操作系统、数据库等等软件开发技能,以便“Do the thing RIGHT”,还需要能够快速领会和深刻洞察业务领域的概念、规则、机制和本质,形成一个反映业务现实的领域模型,代表我们对业务领域的理解,在业务专家、客户、用户、开发人员中间形成共识,这样才能确保我们是在“Do the RIGHT thing”,我们开发的软件才有可能成为“解决了正确的问题”和“正确地解决了问题”的解决方案。否则,难免刻鹄成鹜,画虎类犬。

业务分析和领域建模致力于“Do the RIGHT thing”,而设计和实现致力于“Do the thing RIGHT”。前者远比后者重要。如果你已经南辕北辙了,那么,你跑的越快,离目标就越远。

但是国内大多数的软件公司、团队和开发者,在业务分析和领域建模方面做得不够好,究其原因,大概是因为:

  • 认识错误。以为软件开发就是数据建模,以及针对数据的增删改查,完全没想到需要领域建模。这样的开发模式往往是从现有数据库或报表入手,实现客户的表层需求,忽略业务的本质机制。
  • 对业务分析和领域建模的重要性认识不足,把大部分资源和精力投放在编码实现上。
  • 缺乏领域建模方面的指导和训练,无法快速而深刻地洞察业务领域的本质,因此形成的领域模型充满各种误解和缺陷。
  • 开发人员偏爱钻研具体软件技术,不敢或不愿踏足业务领域分析。

如果建模不足(不够全面,不够深刻,不够抽象),会产生下面的后果:

  • 你的软件不符合或不完全符合客户的需要。
  • 你的软件只符合客户的表层需要和当前需要,当客户需要有变化时(必然如此!),需要对你的代码基做伤筋动骨的改动,甚至根本无法进行扩展和变更。
  • 你的软件只符合当前客户的需要,当需要移植给同行业的其他客户使用时,需要对你的代码基做伤筋动骨的改动。
  • 你的概念模型和技术实现紧密耦合,当需要技术升级或更换技术实现时,需要对你的代码基做伤筋动骨的改动。

好的领域模型深刻反映了业务领域的本质,它不但能够满足客户的当前需要,还能满足客户的未来需要;它不仅满足单一客户的需要,还能满足同行业的其他客户的需要。它使得软件可以快速、安全、低成本地进行扩展和修改,而不影响系统的主体结构。

好的领域模型独立于软件技术实现。相对于技术的日新月异,反映业务现实的领域模型则相对稳定。当新技术出现之后,你可以在原本的领域模型核心之上,采用新技术来更新系统,在保证业务正确性的同时,获得技术先进性的好处。技术为表,业务为里。

Copyright © yyang.io 2016 all right reserved,powered by Gitbook该文件修订时间: 2016-06-05 20:26:20