编程语言
首页 > 编程语言> > php-Zend框架中的建模

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