php-Zend框架中的建模
作者:互联网
我目前正在从事一个大型项目,只是想知道哪种最佳实践是分别或在一个类中对实体和实体集建模?
当前,我为每个实体实现两个类(例如,一个“作者”和“作者”类),其中复数类包含诸如“访存作者”之类的方法(对于复数使用Zend_Db_Table_Abstract,对于单数使用Zend_Db_Table_Row_Abstract).
但是我意识到,我经常在单个实体的对象中看到诸如“获取/列出”功能之类的方法,就我不必拥有那么多文件这一事实而言,这似乎很整洁.
我知道数据建模没有严格的规则,但是在我继续做得太远之前,我会对了解关于最佳实践的普遍共识是什么感兴趣(当然还有支持的论点!).
答案[意见]感激不尽!
罗布·甘利
解决方法:
就个人而言,我更喜欢一个名为Person的模型来实际代表一个人,而更喜欢PersonCollection之类的模型来代表一个人的集合.在任何情况下,我都不会有用于在这些对象上获取/获取的方法.相反,我会将这些方法放在PersonRepository或PersonMapper类上.
对于ActiveRecord作为建模模式,这确实是我最大的不适.通过使用诸如find()和save()之类的方法,它为诸如getPersonByName(),getPersonsWithMinimumAge()等方法打开了大门.这些方法很好,它们没有错,但是我认为从语义上讲,它们在映射器或存储库类.让模型实际建模,将持久性和检索留给映射器和存储库.
因此,为了更直接地解决您的问题,我可能会看到每个“实体类型”三个类:
>人-实际为人建模
> PersonCollection-扩展了一些Abstract Collection类,Person类的每个项目
> PersonMapper-持久性和检索Person对象和PersonCollections
控制器将使用映射器来持久化并检索模型和集合.
我被《 Doctrine2》吸引了,这并不奇怪.那里的EntityManager充当持久性和检索的单个联系点.然后,我可以创建将EntityManager用于自定义功能的存储库和服务.然后,我可以在动作助手,工厂或依赖项注入容器上分层放置,以轻松获取/创建这些存储库和服务.
但是我知道标准的ActiveRecord方法非常普遍,易于理解并且非常主流.使用它可以获得良好的结果,并且可以找到许多立即理解它并可以很好地使用它的开发人员.
与大多数情况一样,YMMV.
标签:zend-db,zend-db-table,modeling,zend-framework,php 来源: https://codeday.me/bug/20191102/1991206.html