知识卡片

领域模型的两种风格:简单对应数据库 vs 复杂细粒度对象网络

普通读书笔记卡

内容

领域模型是合并了行为和数据的领域对象模型,建立一整层对象来对目标业务领域建模,其中有的对象刻画业务数据、有的对象捕捉业务规则,数据和处理紧密聚合在一起。面向对象的领域模型表面上看起来和数据库模型相似,但内在有根本差异——领域模型混合数据和处理过程、拥有多值属性和复杂关联网、还会用到继承,这些都是关系表结构天生不具备的。这些差异让领域模型衍生出两种风格:简单领域模型看起来和数据库设计很类似,几乎每一个数据库表都对应一个领域对象——这种情况下可以直接用活动记录来做持久化,映射工作量不大;复杂领域模型则与数据库设计明显不同,它大量运用继承、策略等设计模式,构成一张由细粒度对象互相勾连的复杂网络——这种领域模型更擅长应对复杂逻辑,但到数据库的映射也困难得多,需要用数据映射器才能撑住这种复杂度。可迁移启发:判断一个领域模型该配哪种持久化机制,不能只看”用没用领域模型”这个标签,还要进一步区分它到底是”贴近数据库结构的简单版”还是”围绕业务概念自成体系的复杂版”——同一个模式标签下,这两种实际形态对应的工程代价完全不同。

参考来源

- 位置:《企业应用架构模式》第二部分"模式"之"第9章 领域逻辑模式"之"9.2 领域模型"(源文件:_epub-src/OEBPS/Text/000064.html) - 结论依据:原文说明"领域模型衍生出两种风格。简单领域模型看起来与数据库设计很类似,这种设计中几乎每一个数据库表都与一个领域对象对应。而复杂领域模型则与数据库设计不同,它使用继承、策略和其他设计模式,是一张由互联的细粒度对象组成的复杂网络。复杂领域模型更适合于复杂的逻辑,但它到数据库的映射比较困难。简单领域模型可以使用活动记录,而复杂领域模型需要使用数据映射器",直接支撑本卡结论。 - 原始内容:简单领域模型可以使用活动记录,而复杂领域模型需要使用数据映射器。