11

我正在阅读 POEAA 的架构模式章节,Fowler 说:“随着域逻辑变得越来越复杂,并且您开始转向丰富的域模型 (116),Active Record 的简单方法 (160) 开始崩溃. 域类与表的一对一匹配开始失败,因为您将域逻辑分解为更小的类。关系数据库不处理继承,因此很难使用策略 [Gang of Four] 和其他简洁的 OO 模式. 随着域逻辑变得活跃,您希望能够测试它而不必一直与数据库对话。”

我真的不明白这一点。“域类与表的一对一匹配”是指仅适用于没有关联或单表继承层次结构的类吗?

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

4

2 回答 2

5

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

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

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

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

于 2011-04-12T14:24:00.720 回答
2

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

于 2011-04-12T14:11:02.303 回答