是否值得在Zend Framework中使用Doctrine 2?

时间:2011-02-02 12:39:15

标签: php zend-framework doctrine-orm

我知道有些用户在Zend Framework中使用Doctrine 2而不是Zend_Db。但我不知道为什么。为什么Doctrine2比Zend_Db好,为什么Zend_Db不好?

由于

3 个答案:

答案 0 :(得分:25)

(2013年3月7日)免责声明:这个答案可能现在有些过时了。我目前还没跟上PHP社区,这种比较是在Doctrine ORM v2和Zend Framework v1之间进行的。这是一个苹果与橘子的比较,因为它们是两个不同的东西。


开箱即用的Zend_Db更像是PDO之上的增强型数据库抽象层,其中Doctrine 2是一个对象关系映射器(位于它自己的DBAL之上)。

对于更复杂的域层,Doctrine 2更好,因为所有业务逻辑,持久性逻辑等都是在多个类之间分开的,因此它们不能提供多个角色。此外,因为你有更多的类 - 更干净和松散耦合 - 它使测试更容易。

此外,您将只编写使用Zend_Db的SQL的一小部分,因为您可以操纵实体对象,而Doctrine会将这些更改转换为数据库。生成的SQL还利用了可以提高性能的事务!

我建议你阅读领域驱动设计,以便更好地理解Doctrine 2为何如此出色。

不要误解我的意思,你可以用Zend_Db做DDD,但它不是真的有OOTB(因为它不是ORM),并且不会像Doctrine 2那样功能强大且功能齐全。

答案 1 :(得分:0)

如果您有一个必须使用特定DBMS的小项目,则不需要ORM和Doctrine。

如果你有一个很大的项目,并且将来可能需要适配器从一个dbms切换到另一个dbms,那么你可能会考虑使用Doctrine

正如你可以在Doctrine描述中读到的那样:

  

Doctrine 2是一个对象关系   适用于PHP 5.3.0+的mapper(ORM)   提供透明的持久性   PHP对象。它位于一个顶部   强大的数据库抽象层   (DBAL)。对象关系映射器   主要任务是透明的   (PHP)对象和。之间的转换   关系数据库行。

答案 2 :(得分:0)

Zend_DB和Doctrine使用不同的方式。 Zend_DB的工作方式类似于表数据网关和行数据网关。 Doctrine是对象映射器。

根据我的经验,Zend_DB对于大多数常见任务而言足够快速。 Doctrine很慢并且使用的内存比Zend_DB多。