我知道有些用户在Zend Framework中使用Doctrine 2而不是Zend_Db。但我不知道为什么。为什么Doctrine2比Zend_Db好,为什么Zend_Db不好?
由于
答案 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多。