知识卡片

表模块是记录集导向的中间地带

普通读书笔记卡

内容

表模块乍看像领域模型(同样有合同、产品、收入确认类),但关键区别在于:领域模型对数据库里每一条合同记录都有一个专属的合同类实例,表模块却只有一个公共的合同类实例——这个类围绕整张表而非围绕某一条具体记录组织,客户要先查询数据库生成记录集,再用这个记录集构造出表模块对象,之后每次调用方法都必须附上具体合同的ID才能定位到哪一条记录。这种设计的最大优势在于与既有软件架构的天然衔接:许多GUI环境(尤其微软COM和.NET)在设计上就假定要和SQL查询返回的记录集协同工作,表模块本身就是操作在记录集之上的,因此可以很自然地”查询数据库→表模块内计算校验→把结果记录集传给GUI显示”,用户界面回填的数据也能原样传回表模块做二次计算和校验。可迁移启发:选择表模块本质上是在下注”这个技术栈的生态是否天然围绕记录集打转”——如果开发环境本身就大量提供基于记录集的现成工具,表模块几乎是顺水推舟;如果开发环境没有这类工具,表模块的吸引力就无从谈起,不必强行套用。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第2章 组织领域逻辑"(源文件:_epub-src/OEBPS/Text/000015.html) - 结论依据:原文说明"关键的区别在于领域模型对数据库中每一个合同都有一个相应合同类的实例,而表模块只有一个公共的合同类实例……许多GUI环境在设计时都假定其将与SQL查询的返回结果协同工作,这些结果是以记录集的方式组织的。表模块也工作在记录集之上……许多平台都使用这种开发网格,尤其是微软的COM和.NET",直接支撑本卡结论。 - 原始内容:表模块最大的优点在于其与软件架构中已有部分的衔接。许多GUI环境在设计时都假定其将与SQL查询的返回结果协同工作,这些结果是以记录集的方式组织的。表模块也工作在记录集之上……许多平台都使用这种开发网格,尤其是微软的COM和.NET。