Kap*_*rma 2 propel doctrine symfony1 symfony-1.4
我有CodeIgniter和Cake PHP的项目经验.但是现在我需要处理一个两个都不合适的大项目.我几乎决定使用symfony 1.4(根据我客户的要求,2.0不是一个选项).
在Symfony 1.4中,我在ORM选择:Doctrine或Propel之间感到困惑?我经历了几个链接.迄今为止最好的是 PHP ORM:Doctrine vs. Propel.
然而,所有这些比较似乎至少有两年的历史,而且世界肯定会发生很大变化.我对编码风格没有任何问题; 我对所有Active Record,Criteria,DQL或其他什么都很好.对我来说,性能最重要的是编码风格.我主要关注处理大量数据时的性能,可能是来自集群数据库下多个表的数百万行.不幸的是,目前我的经验还不足以对此事作出独立决定.
任何人都可以在Symfony 1.4下了解Propel/Doctrine的性能吗?除了性能之外,还有其他值得注意的因素(编码风格除外),选择PHP ORM时应该注意哪些因素?
tl; dr:我使用了Doctrine很长一段时间,如果我必须开始新的事情,我会选择Propel.
这是一个几乎没有好答案的常见问题.但我会告诉你我的观点.
自从第一个alpha(以及旧的symfony 0.63)以来,我一直在使用Doctrine.我们选择Doctrine而不是Propel,因为Doctrine支持PDO(PHP原生),而Propel仍在Creole上运行(不是原生的).与PDO相比,克里奥尔语非常缓慢(当然).
最近,Doctrine增加了一个魔法.我的意思是,你可以调用getField,findOneByField一切,它会回报你想要的东西.这真的很棒,而不是必须建立自己的getter和setter.魔术在这个时候真的很新潮.
使用Doctrine编写查询非常简单,而不是来自Propel的痛苦标准和标准,这非常冗长.我真的很喜欢Doctrine,并建议大家开始使用它而不是Propel.
然后,Propel从1.3开始切换到PDO并开始有一个很好的API来编写查询,几乎与Doctrine相同.主要区别在于,Propel会在Doctrine即时构建时生成所有神奇的东西.这是我认为最大的不同.
Propel在这段代码中没有任何魔力.它会在您构建模型时生成所有getter/setter,join等.Doctrine在运行查询时会执行所有操作.这对于中小型项目来说没问题,但它开始变大,它将成为一个缓慢的解决方案.它也很适合调试,因为你在生成的类中找到代码,你不必从类跳转到类来找到处理这种情况的全局方法.
两个ORM都使用行为.我喜欢这些行为.它们在Doctrine和Propel中以不同的方式处理.Doctrine仍然使用它的魔法来处理它们,其中Propel从类中的行为生成所有内容(从生成的类而不是魔术类中再生成一个点).
到目前为止,Doctrine中没有任何改变(为了从你提到的线程中提取一个),因为Doctrine 2(对于sf 1.4来说根本不是本机的)因为1.2.x分支几乎已经死了(最后一个版本是24/08/2010).正如你在github上看到的那样,Propel仍然是活跃的,非常活跃.
我仍然在使用Doctrine,但是几年后我从Propel中学到了很多东西.我在Doctrine上构建了一些个人项目.截至今天,我改变了主意,如果我必须开始一个新项目,我将使用Propel.
几个链接:
| 归档时间: |
|
| 查看次数: |
1332 次 |
| 最近记录: |