为什么活动记录模式不适用于丰富的域模型?

时间:2011-04-11 16:17:49

标签: php model-view-controller activerecord datamapper poeaa

我正在阅读POEAA的架构模式章节,Fowler说“随着域逻辑变得越来越复杂,你开始转向丰富的域模型(116),Active Record(160)的简单方法开始了当你将域逻辑分解为较小的类时,域类与表的一对一匹配开始失败。关系数据库不处理继承,因此很难使用策略[Gang of Four]和其他整洁的OO模式。随着域逻辑变得越来越强大,你希望能够在不必经常与数据库通信的情况下对其进行测试。“

我真的不明白这一点。通过“域类与表的一对一匹配”,他是否仅表示没有关联或单表继承层次结构的类?

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

2 个答案:

答案 0 :(得分:5)

他想说的是,更复杂的领域模型通常不仅仅是“来自表格的数据”。福勒所谈论的这些更复杂的模型是从不同的表格,视图或甚至其他来源获取数据的模型。

Active Record模式不太适合这个目的,DataMapper模式只与模型类(仅包含业务逻辑,不与数据访问层通信)相结合,可能更适合这类情况。 / p>

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

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

答案 1 :(得分:2)

不,我认为他在谈论域逻辑。使用活动记录,对象包含数据和行为。这是一对一的比赛。如果您开始分离数据/行为,就像在Data Mapper模式中那样,它就变成了一对多。我的印象是,你有时真的必须读这本书,就像学术上的胡说八道才能理解他的意思。 : - )

相关问题