【问题标题】:DataMapper ORM vs. DoctrineDataMapper ORM 与 Doctrine
【发布时间】:2011-10-13 02:35:51
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: php codeigniter orm doctrine codeigniter-datamapper


    【解决方案1】:

    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 说你不应该这样做并不意味着你不能这样做。 Doctrine 很乐意将您的模型与公共属性一起使用,但有一些警告。就是这样。

    【讨论】:

    • Sander,你似乎对这个话题非常了解,所以也许你可以帮助我。当您说“[教义] 模型是普通的旧 PHP 对象”时,您的意思是“实体”吗?您如何将“实体”的概念与 CI 模型融为一体?他们是替代品吗?现在我在 Doctrine 实体存储库中有我的模型函数(如“getRecentPosts()”)。这是一条好路吗?
    • 是的,我指的是实体。 CI(我假设你的意思是 Codeigniter)没有。它的模型与 CI 的其余部分相结合。但是你可以use Doctrine2 with Codeigniter。是的,getRecentPosts() 正是您想要放入存储库的那种函数。
    猜你喜欢
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多