Doctrine2或zend_db

时间:2011-07-06 07:57:03

标签: zend-framework doctrine-orm

我使用过Zend_Db并且发现它非常好,但为什么有些书籍和文档主张在Zend_Db上使用Doctrine 2?我不是ORM的专家,但是Zend_Db可以做一些功能而且Doctrine ORM不能吗?

哪个更安全?

同时使用两者的专家:您建议我使用哪一个?

是否有任何关于Doctrine 2的书?

3 个答案:

答案 0 :(得分:15)

  

..但是他们的一些功能是Zend_Db可以做的而ORM不能

本身没有真正的功能;最后,您可以通过ZDB和ORM或任何其他方法处理持久性。但是使用ORM有时可以让你更多地关注你的模型而不是你的持久性。

  

是否有任何关于Doctrine 2的书?不是文件!

实际上,我发现official Doctrine2 documentation非常好。

Zend Framework应用程序中另一个有用的东西是Zend应用程序资源(Boris Guery的like this one),它允许您在引导程序中设置Doctrine,以便您可以轻松访问插件中的实体管理器,控制器和其他服务。有关通过_initXXX()方法执行Doctrine2引导程序的示例,请参阅Eddie Jaoude驾驶的code in this project

  

最后我应该在Doctrine 2之前学习学说1.2吗?

不,Doctrine2与Doctrine1明显不同。

  

对于那些同时使用你建议我使用的专家?

嗯,我不是专家。但是我发现Doctrine2(这是一种基于映射器的持久性方法)比Doctrine1的ActiveRecord方法更自然,更容易让我的模型代表实际的域对象 - 用户,帖子等 - 而不是作为对象检索的网关和坚持。通过使用EntityManager作为持久性的主要途径,我发现构建其他需要持久性的服务更容易;我只是将EntityManager作为构造函数参数传递。 Doctrine2的存储库提供了一个放置自定义查询的干净位置。

并不是说在ZDB或其他ORM下这一切都是不可能的;只是我发现Doctrine2很简单。

总结:Doctrine2非常棒。 ; - )

答案 1 :(得分:6)

Zend_Db不是ORM。它只是一组实现数据库功能的类。

Zend_Db_Table实现了表数据网关设计模式。有了这个,您可以编写许多扩展类并构建自己的对象映射器,但不要认为Zend_Db是像Doctrine那样的“开箱即用”的ORM解决方案。

我发现Zend_Db不太适合编写复杂的对象映射器,但我更喜欢ORM,因为我觉得我可以更好地控制它的行为方式。

答案 2 :(得分:1)

我记得在某处读到Zend_Db的开发人员对最终结果不满意。在实践中,我发现它比使用直接PDO访问数据库更加笨拙,速度慢,并没有太大的改进。

学说2虽然我对它的经验很少,但似乎是建立在更强大的概念之上,并且不太可能在将来引起你的问题。

那就是说,这非常适合你的任何事情 - 如果你已经使用过Zend_Db,也许你最好坚持使用它而不是学习一个新的库。