ZF2:TableGateway与Doctrine2

时间:2016-06-27 21:19:49

标签: zend-framework doctrine-orm zend-framework2 doctrine-odm

你能列出与学说相反的原生ORM的优缺点吗?

ZF1为我提供了非常友好的原生ORM(Zend_Db_TableZend_Db_Table_Row),Zend\Db\TableGateway\TableGatewayZend\Db\RowGateway\RowGateway继续这样做。为什么大多数人都试图使用Doctrine2,尽管它是一个笨重的主要原因?

P.S。甚至单词" repository"不是我的数据库..

1 个答案:

答案 0 :(得分:0)

让我们从几个定义开始。

  

数据库抽象层(DBAL):位于数据库连接之上的层(Driver +   平台)并提供直观,灵活的API进行通信   与最受欢迎的关系数据库。

     

对象关系映射(ORM):一种允许您查询和使用的技术   使用面向对象的范例操纵数据库中的数据。   这个范例必须包含一个Unit of Work来跟踪   您的Entities(数据对象)的状态,以便了解哪些操作   (如水合作用和数据库交易)必须进行维护和保证   数据在整个生命周期内的准确性和一致性。此外,范例必须考虑对象关系以保持数据完整性。这些元素是任何ORM实现的基本方面。

因此,Zend\Db不提供ORM功能,因为它只是一个抽象层。您可以尝试使用水合器和Zend\Db\ResultSet\HydratingResultSet构建一个,然后创建自己的工作单元。我已经看到Ralph Schindler创建的代码正在沿着这条路走下去(顺便提一下代码非常令人印象深刻!)但是本身仍然不是ORM。所以,如果你决定沿着同一条路前进,那么你将为你完成工作......使用Doctrine的ORM肯定会简单得多!

最后,Zend\Db\TableGateway\TableGatewayZend\Db\RowGateway\RowGateway分别使用已知的软件模式设计(分别为TableGateway模式和活动记录模式 - 不要与Design Patterns混淆)。但这与企业应用程序架构模式(EAA)无关(如工作单元模式)。有关EAA模式的更多信息,请阅读Martin Fowler的书 企业应用程序架构模式