知识卡片

通过领域建模反向促进领域理解

普通读书笔记卡

内容

开发人员面临领域知识不足的项目时,一个有效的技巧是”反其道而行之”——正如代码重构有一种反常规应用是”通过代码重构促进对程序的理解”(不是先完全理解程序再重构,而是通过重构过程本身加深理解),领域建模同样可以”反其道而行之”:通过领域建模促进对领域的理解,而不是先完全弄懂领域再开始建模。领域知识的核心难点不在单个概念本身——开发人员通常对单个概念还算清楚,真正让人发憷”领域知识不足”的,是领域概念之间的”对应”关系、”包含”关系、”如果……则……”关系这类结构性认知。因此破解”领域知识不足”死结的关键是”理顺概念关系、搞清业务规则”,这恰恰是领域模型的强项——通过对复杂领域进行”概念抽象”和”关系抽象”来建立模型,从而获得对领域知识的总体把握,不至于掉入杂乱无章的概念”堆”里。具体做法是:先花精力收集领域词汇定义(从《用户手册》、各种业务资料、尤其是《领域词汇表》文档中获取,公司以前的相似背景项目的《领域词汇表》同样很有帮助),再借助这些文本描述、以领域建模为手段梳理对领域的理解。书中用在线拍卖系统举例说明词汇表和领域模型的差距:单纯逐行列出商品、价格、买家、卖家等词汇的定义,虽然定义明确,但揭示概念之间关系的能力很弱,且随着概念增多这个缺点会越明显;一旦转成领域模型的类图,”买家、卖家、拍卖商品、成交”之间的关系就能一目了然(如”成交是拍卖商品、买家、卖家之间的一种关系,其中买家是喊出成交价的那个买家”),配上状态图还能进一步刻画交易的多阶段流程,领域知识经过这样的梳理,在开发人员头脑中会变得清晰起来。

参考来源

- 位置:《软件架构设计:程序员向架构师转型必备》第7章《领域建模》"7.3.1 领域模型作为'理解领域的手段'"及"7.3.2 案例:从词汇表到领域模型"节(源文件:_epub-src/OEBPS/text00010.html) - 结论依据:原文说明"我们就推荐'领域建模'的一种'反其道而行之'的应用——通过领域建模促进对领域的理解",并指出"破解'领域知识不足'死结的关键是'理顺概念关系、搞清业务规则'",用在线拍卖系统的词汇表与领域模型对比说明模型在揭示概念关系上的优势,直接支撑本卡片结论。 - 原始内容:现在,我们就推荐"领域建模"的一种"反其道而行之"的应用——通过领域建模促进对领域的理解……感觉定义虽明确,但在揭示多个领域概念之间关系方面比较欠缺……模型告诉我们:成交是拍卖商品、买家和卖家之间的一种关系。