为什么活动记录模式不能与富域模型一起工作


Why does active record pattern not work with rich domain models?

我正在阅读POEAA的体系结构模式章节,Fowler说:"随着领域逻辑变得越来越复杂,并且您开始向丰富的领域模型(116)移动,活动记录(160)的简单方法开始崩溃。当您将域逻辑分解为更小的类时,域类与表的一对一匹配开始失败。关系数据库不处理继承,因此很难使用策略[Gang of Four]和其他整洁的OO模式。随着领域逻辑变得活跃,您希望能够在不需要一直与数据库通信的情况下对其进行测试。"

我真的不明白这个。通过"域类与表的一对一匹配",他是否意味着仅适用于没有关联或单表继承层次结构的类?

为什么将域逻辑分解为更小的类会导致模式失败?

他想说的是,更复杂的领域模型通常不仅仅是"表中的数据"。Fowler所说的这些更复杂的模型是从不同的表、视图甚至其他来源获取数据的模型。

活动记录模式不太适合此目的,而DataMapper模式与仅模型类(仅包含业务逻辑并且不与数据访问层通信)相结合可能更适合于此类情况。

Active Record模式在这里失败了,因为它或多或少直接映射到数据库中的表。

我不知道确切的模式定义,所以如果我错了,请纠正我。

不,我想他说的是领域逻辑。在活动记录中,对象同时携带数据和行为。所以这是一对一的匹配。如果开始分离数据/行为,就像在data Mapper模式中一样,它就变成了一对多。我的印象是,有时你真的必须把那本书当成学术胡说八道来读,才能理解他的意思。: -)