ZF模型正确使用

时间:2011-08-10 09:17:47

标签: zend-framework model

我正在努力学习如何理解模型的正确用法。目前我直接使用Db_Table的继承并在那里声明所有业务逻辑。我知道这不是正确的方法。

一种解决方案是使用Doctrine ORM,但这需要学习曲线和我使用的所有当前组件需要重写paginator和auth。 Doctrine1还增加了另外十几个需要加载的类。

所以我目前最干净的实现是在所谓的模型和DbTabel之间使用Data Mapper类。我还没有实现这个,因为它似乎在编写另一个ORM。但是示例可能是这样的:SQL表用户

  • 在这里使用setter,getters和业务逻辑创建类 /model/User.php
  • 数据映射器 /model/mapper/UserMapper.php ,功能基本上是编写所有更新,在此处保存操作。
  • 数据源 /model/DbTable/User.php 扩展了Db_Table_Abstract

问题在于其他模型之间的关系。

2 个答案:

答案 0 :(得分:1)

我发现让我的模型扩展Db_Table,但改为使用合成。这意味着我的模型'有'Db_Table而不是'是'Db_Table。

这样我觉得在同一个模型中引用多个表要容易得多,这是一个常见的要求。这对于一个简单的项目就足够了。我目前正在开发一个更复杂的应用程序,并使用了Data Mapper模式,并发现它比我想象的更简化了我的代码。

具体来说,我创建了一个类,它提供了对数据库的所有访问,并公开了诸如getUser()等方法。这样,如果数据库发生了变化,或者我的客户想要像在XML中存储记录那样愚蠢或我们分裂服务器或其他我只需重写一个类。

同样,我的模型不会扩展此类,但在构造期间将其实例指定为属性。

答案 1 :(得分:0)

我会说“正确”的方式取决于具体情况。遵循YAGNI和KISS原则,除非您真的相信它会从长远来看对您有益,否则将您的模型设置过度复杂化并不好。

您正在开发的应用程序是什么?您目前的扩展Db_Table设置如何阻止您?