我正在阅读POEAA的架构模式章节,Fowler说“随着域逻辑变得越来越复杂,你开始转向丰富的域模型(116),Active Record(160)的简单方法开始了当你将域逻辑分解为较小的类时,域类与表的一对一匹配开始失败。关系数据库不处理继承,因此很难使用策略[Gang of Four]和其他整洁的OO模式。随着域逻辑变得越来越强大,你希望能够在不必经常与数据库通信的情况下对其进行测试。“
我真的不明白这一点。通过“域类与表的一对一匹配”,他是否仅表示没有关联或单表继承层次结构的类?
为什么将域逻辑分解为较小的类会导致模式失败?
答案 0 :(得分:5)
他想说的是,更复杂的领域模型通常不仅仅是“来自表格的数据”。福勒所谈论的这些更复杂的模型是从不同的表格,视图或甚至其他来源获取数据的模型。
Active Record模式不太适合这个目的,DataMapper模式只与模型类(仅包含业务逻辑,不与数据访问层通信)相结合,可能更适合这类情况。 / p>
Active Record模式在这里失败,因为它或多或少地直接映射到数据库中的表。
我不知道确切的模式定义,所以如果我错了请纠正我。
答案 1 :(得分:2)
不,我认为他在谈论域逻辑。使用活动记录,对象包含数据和行为。这是一对一的比赛。如果您开始分离数据/行为,就像在Data Mapper模式中那样,它就变成了一对多。我的印象是,你有时真的必须读这本书,就像学术上的胡说八道才能理解他的意思。 : - )