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

bla*_*e24 11 php model-view-controller activerecord datamapper poeaa

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

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

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

Ric*_*uin 5

他试图说的是,更复杂的领域模型通常不仅仅是"来自表格的数据".Fowler所讨论的这些更复杂的模型是从不同的表,视图或甚至其他来源获取数据的模型.

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

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

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


tvl*_*ooy 2

不,我认为他在谈论领域逻辑。通过活动记录,对象同时携带数据和行为。所以这是一场一对一的比赛。如果您开始分离数据/行为,就像在数据映射器模式中一样,它就会变成一对多。我的印象是,有时你真的必须像读学术废话一样读那本书才能理解他的意思。:-)