为什么我需要在Zend中使用Application_Model_User和Application_Model_DbTable_User?

时间:2012-08-22 12:28:49

标签: php zend-framework

两者都有意义吗?我按照Zend教程告诉我创建用户模型,但是我不能只在DB模型类中为用户建模?

由于

2 个答案:

答案 0 :(得分:2)

这是“关注点分离”http://en.wikipedia.org/wiki/Separation_of_concerns

概念的一部分

您的模型类负责业务逻辑,验证,变量操作等,您的db模型类应该只处理数据库处理,这样如果您需要替换db模型,它不会影响主模型,并且如果替换主模型,只要将正确的参数传递给它,它就不会影响db模型。

答案 1 :(得分:0)

是的,您可以在Application_Model_DbTable_User(DbTable类)中为您的用户建模,只要您需要的所有数据都在该表中,它就能正常工作。

在某些时候,您可能会开始处理应该在多个表中表示的对象。这时您将发现需要采用不同的方式来做事。

映射器和域对象可能重要的一个更好的简单示例:

mp3文件。
 最简单的是,单个音乐文件应该至少由3个db表表示:

  1. 专辑:表示该歌曲来自的专辑的表格
  2. 艺术家:录制歌曲的艺术家
  3. 曲目:有关曲目本身的信息
  4. 每个 艺术家 可以有多个 相册 ,每个 相册 将有一个 艺术家 ,并且会有多个 曲目 ,每个 曲目 将属于一个 相册 和一个 艺术家 (不同版本将有所不同轨道)。

    正如您所看到的,即使是简单的mp3集合的数据库结构也会变得非常复杂。在大多数情况下,即使是简单的用户记录也会分布在多个表中,具体取决于持久存储的数据量和数据类型。

    为了帮助理解如何以及为什么实现映射器和模型,我发现这些资源非常有用。

    Building a Domain Model,涵盖了域模型以及如何在PHP中构建域模型 Adding Mappers to a Domain Model,将mapper函数添加到同一域模型中 Survive the Deepend,一个专注于模型和测试的Zend Framework入门者。

    前两个链接是用普通的PHP完成的,但仍然非常有帮助。