php - Zend 框架中的建模

标签 php zend-framework zend-db zend-db-table modeling

我目前正在从事一个大型项目,我只是想知道哪种最佳做法是分别为实体和实体集建模还是在一个类中建模?

目前我正在为每个实体实现两个类(例如“作者”和“作者”类),其中复数类包含像“获取作者”这样的方法(使用 Zend_Db_Table_Abstract 表示复数,使用 Zend_Db_Table_Row_Abstract 表示单数)。

但是我意识到我经常在单个实体的对象中看到诸如“获取/列表”函数之类的方法,就我不必拥有那么多文件而言,这看起来非常简洁。

我知道数据建模没有硬性规定,但在我继续深入之前,我有兴趣了解关于最佳实践的普遍共识是什么(当然还有支持论据!) .

非常感谢回答[意见]!

罗布·甘利

最佳答案

就我个人而言,我更喜欢使用名为 Person 的模型来实际表示一个人,而使用类似 PersonCollection 的模型来表示一组人。在这两种情况下,我都会有获取/获取这些对象的方法。相反,我会将这些方法放在 PersonRepositoryPersonMapper 类中。

这确实是我对 ActiveRecord 作为建模模式最大的不满。通过像 find()save() 这样的方法,它打开了像 getPersonByName()getPersonsWithMinimuAge() 这样的方法的大门 等。这些方法很棒,没有任何问题,但我认为从语义上讲,它们在映射器或存储库类上工作得更好。让 Model 实际建模,将持久性和检索留给映射器和存储库。

因此,为了更直接地解决您的问题,我看到每个“实体类型”可能分为三个类:

  1. Person - 实际上是一个人的模型
  2. PersonCollection - 扩展一些抽象集合类,类 Person 的每个项目
  3. PersonMapper - Person 对象和 PersonCollections
  4. 的持久化和检索

Controller 将使用映射器来保存和检索模型和集合。

我被 Doctrine2 所吸引可能并不奇怪。 EntityManager 用作持久性和检索的单一联系点。然后,我可以创建使用 EntityManager 实现自定义功能的存储库和服务。然后我可以在操作助手或工厂或依赖项注入(inject)容器上分层,以便轻松获取/创建这些存储库和服务。

但我知道标准的 ActiveRecord 方法非常普遍、易于理解并且非常主流。您可以使用它获得良好的结果,并且可以找到许多立即理解它并且可以很好地使用它的开发人员。

在大多数情况下,YMMV。

关于php - Zend 框架中的建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6720058/

上一篇:PHP 轮返回值

下一篇:php - Yii 条件验证

相关文章:

php - 发送原始发布数据

php - 使用 PHP 从 Google Analytics API 获取事件数据

php - Zend DB fetchAll() 无法处理值超过 926 的 "id"列

java - 如何计算上传文件 PDF、Doc、Xls、Csv 等中的单词字符或句子

php - 如何使用 Zend_Db 获取 Sqlite 数据库的最后插入 ID

php - 带有预准备语句的 Zend db 无法获取所有数据

php - "Unknown database type json requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it."运行 php artisan migrate 命令时

php - 使用构造函数创建新对象时出现 undefined variable 错误

zend-framework - Zend -> 警告 : is_readable() [function. 可读]:open_basedir 限制生效

zend-framework - 是否可以为 zend 模型使用多个命名空间以及如何自动加载它?