11

我即将开始在 CodeIgniter 中开发一个新的 Web 应用程序。过去,我使用DataMapper ORM来满足我的对象映射需求,并且对它的功能完全满意。然而,我的满意只是我所知道的。因此,我正在考虑改用Doctrine

我查看了 Doctrine 的文档——看来你必须相当广泛地定义你的模型;添加 getter 和 setter,提供方向引用,提供映射等。乍一看,与 DataMapper ORM 相比,这似乎是巨大的开销。

任何对这两种 ORM 都有经验的人可以评论是什么驱使你从一个到另一个?

Doctrine 实现了 DataMapper ORM 无法实现的哪些关键功能?

手动模型定义是倒退还是前进?我认为这是一个性能问题。

4

1 回答 1

22

DataMapper ORM 和 Doctrine 遵循一组完全不同的约定。DataMapper ORM(令人困惑)不是数据映射器,而是活动记录实现。这意味着您的模型类与 ORM 库紧密集成。您的模型建立在内置的 DataMapper 模型之上。您可以免费获得很多魔法,但作为交换,您可以将模型与 DataMapper ORM 结合起来。

另一方面,Doctrine 使用真正的数据映射器模式。它的模型是普通的旧 PHP 对象。他们没有外部依赖。Doctrine 可以获取任何旧的 PHP 对象,将其存储在数据库中,然后再次检索它。它的模型根本不与 ORM 耦合。

您在 Doctrine 文档中读到的有关 getter、setter、关系完整性等的内容,它们只是很好的 OO 开发实践。它们不是 Doctrine 的要求,但它们使您的生活更轻松。您也应该将它们用于您的 DataMapper ORM 模型!如果你愿意,你可以在你的 Doctrine 模型上使用魔法 getter 和 setter,甚至只是简单的旧公共属性。只是因为教义说你不应该这样做,并不意味着你不能这样做。Doctrine 很乐意将您的模型与公共属性一起使用,但有一些警告。就这样。

于 2011-07-26T06:10:08.557 回答