6
我应该选择教义2还是Propel 1.5 / 1.6,为什么?[关闭]
我想听听那些使用Doctrine 2(或更高版本)和Propel 1.5(或更高版本)的人的信。这两个对象关系映射器之间的大多数比较都基于旧版本-Doctrine 1与Propel 1.3 / 1.4,并且两个ORM在其最新修订版中都进行了重大的重新设计。例如,大多数对Propel的批评似乎都集中在“ ModelName Peer ”类上,无论如何在1.5中都弃用了该类。 到目前为止,这是我积累的(并且我尝试使此列表尽可能平衡...): 推进 优点 对IDE非常友好,因为它生成了实际的代码,而不是依赖于PHP魔术方法。这意味着诸如代码完成之类的IDE功能实际上很有帮助。 快速(就数据库使用而言-对数据库不进行运行时自省) 架构版本之间的干净迁移(至少在1.6 beta中) 可以生成PHP 5.3模型(即名称空间) 使用方法之类的东西很容易将很多东西链接到一个数据库查询中useXxx。(请参见上面的“代码完成”视频) 缺点 需要一个额外的构建步骤,即构建模型类。 每当更改Propel版本,更改设置或更改架构时,都需要重建生成的代码。这对某些人可能是不直观的,并且丢失了应用于模型的自定义方法。(我认为吗?) -不正确;自定义方法不会丢失,因为生成的类是基类。Propel提供了专门用于扩展的实体类。 一些有用的功能(即版本行为,架构迁移)处于beta状态。 教义 优点 更流行 与Propel的ActiveRecord策略相比,学说查询语言可以表达数据之间潜在的更复杂的关系。 与Propel相比,更易于添加可重用的行为。 用于构建架构的基于DocBlock的注释嵌入在实际的PHP中,而不是单独的XML文件中。 在各处使用PHP 5.3命名空间 缺点 需要学习一种全新的编程语言(Doctrine查询语言) 根据“魔术方法”在多个地方实现,使IDE自动完成功能一文不值。 需要数据库自省,因此默认情况下比Propel慢一些;缓存可以消除这种情况,但是缓存会增加相当大的复杂性。 较少的行为包含在核心代码库中。Propel开箱即用提供的某些功能(例如嵌套集)仅可通过扩展使用。 怪异的巨大:) 我仅通过阅读可用于这两种工具的文档来收集了这些信息-我实际上还没有构建任何东西。 我想听听那些曾经使用这两种工具的人,分享他们在每个库的优缺点方面的经验,以及他们对此的建议:)