你能列出与学说相反的原生ORM的优缺点吗?
ZF1为我提供了非常友好的原生ORM(Zend_Db_Table
和Zend_Db_Table_Row
),Zend\Db\TableGateway\TableGateway
和Zend\Db\RowGateway\RowGateway
继续这样做。为什么大多数人都试图使用Doctrine2,尽管它是一个笨重的主要原因?
P.S。甚至单词" repository"不是我的数据库..
答案 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\TableGateway
和Zend\Db\RowGateway\RowGateway
分别使用已知的软件模式设计(分别为TableGateway模式和活动记录模式 - 不要与Design Patterns混淆)。但这与企业应用程序架构模式(EAA)无关(如工作单元模式)。有关EAA模式的更多信息,请阅读Martin Fowler的书 企业应用程序架构模式 。