【发布时间】:2010-11-03 18:59:35
【问题描述】:
当我运行doctrine orm:validate-schema 时,它会弹出一堆关于我的映射列是公开的并且没有使用getter/setter 方法来包装它们的警告。它说他们“打破延迟加载”。我可以理解将 关联集合 公开可能会有问题(我确实将它们设为私有并包装它们),但这对于对象上的字段来说是个问题吗?据我所知,字段已全部加载。
【问题讨论】:
-
老实说,我也不敢相信,直到我意识到:Doctrine 是一个 Java 库。如果他们专注于尽可能最好地使用 PHP 惯用语,而不是强迫您采用另一种语言设计的“最佳实践”,那么性能可能不会那么糟糕。我原则上同意 getter 和 setter 的论点,但在他们所做的只是代理公共字段的解释性语言中,它们是不必要的资源浪费。
-
@Shabbyrobe:谢谢。你基本上已经说出了我一直以来的想法。 Doctrine 基本上是 Hibernate 的克隆。 PHP 需要的是更多是 Active Record 的克隆。
-
Doctrine 2 和 Hibernate 都是平台无关数据映射器模式的实现,但我认为 Doctrine 2 实现它的方式使用了太多的 Java 习惯用法,例如“绝对一切的 getter 和 setter,没有问题问”。 PHP 是一种解释型语言 - 为什么要添加在对性能有可衡量的负面影响时基本上什么都不做的方法?我已经概述了我反对“一切事物的获取者和设置者”立场here的一些论点。
-
如果您正在使用 PHP 实现活动记录,您可以尝试this。我个人更喜欢数据映射器模式而不是活动记录,但我更愿意使用用惯用 PHP 编写的活动记录库,而不是用惯用 Java 伪装成 PHP 编写的数据映射器库,所以我要看看这个库下午。
-
如果你想要一个具有活动记录模式的 ORM,只需使用 Doctrine1 或 Propel。
标签: php doctrine-orm