关于mvc模式的问题

时间:2010-02-05 03:17:27

标签: php model-view-controller

我不太明白这种模式。

从我读过的内容来看,它看起来像一个模型=一个表(如果你使用数据库来存储数据)。

所以,如果我有一个名为tags的表,我应该有一个标签模型。并使用线程表创建线程模型。

然后我有一个标签控制器和线程控制器吗?

那么如果我有一个多对多关系的tags_threads_map表怎么办呢。

我应该有一个tags_threads_map模型,例如。我得到包含标签的所有线程?我也应该有一个tags_threads_map控制器吗?

如果有人可以解释或给我一个很好的breif教程,

会很棒。

大多数教程只是给出一个简单的1:1:1示例。

5 个答案:

答案 0 :(得分:4)

要完全理解MVC或任何软件设计模式,您真的需要实现它并查看结果。

那就是说,MVC没有规定一个模型=一个表。实际上,模型可以由许多表支持,甚至可以支持源自关系数据库以外的其他数据(例如,Web服务,平面文件,键值存储或图形数据库)。

我建议创建表示相关表的有意义聚合的模型和视图可能是一种很好的方法。例如,要使用Order和OrderLine表的timeworn示例,Order模型可能会封装对最终将在Order表或OrderLine表中结束的数据的操作。

坚持表格与模型的严格一对一映射,视图和控制器只会导致类的爆炸,其中一些可能没有单独做多少。更好地构建模型和控制器,更专注于实现业务需求确定的某些任务,而不仅仅是数据模型的投影。

答案 1 :(得分:2)

所以这个想法不是“一个模型=一个表”,而是你不希望管理数据的代码与管理数据操作的代码交错< / em>或处理用户交互的代码。如果你有某种持久层来处理对象到数据库的映射,那就足以拥有一个基本的模型。如果你有一些单独的代码,那就是用这些数据做算法,那就是一个控制器。如果您有一种渲染数据供用户使用的方法,那就是一个视图。

想到的最好的例子是电子表格:电子表格中的数据就是您的模型。如果工作表中有表达式来操作数据,则可以将其视为控制器。如果您以表格形式或图表形式查看数据,则这两个视图。视图不会破坏数据或计算方式 - 它们会为您的眼睛设置格式。控制器不会为您的眼睛格式化数据 - 它会创建/更改/计算数据。重要的是分离概念,以便您可以编写不关心数据存储方式的算法,以及不关心数据计算方式的视图。

答案 2 :(得分:2)

在我看来,最好将模型视为对象类型的模型,而不是一个特定的表。

通常,您的MVC框架将根据标记和线程模型中的定义来处理您的多对多关系。

你绝对不需要每个型号的控制器;控制器通常与视图关系更密切(尽管一个控制器通常有多个视图)。

这似乎太过笼统,无法在这里得到满意的回答。

答案 3 :(得分:1)

模型可以比这更动态。例如,如果您有博客,并且博客有标签,那么您的模型可能被称为博客,它可以包含一组标签。

答案 4 :(得分:1)

模型可以是存储数据的任何东西。在我正在处理的网络应用程序中,有几个联系人表,他们所属的组所在的地址等等。最好按类型拆分它们,我应该制作一个小组模型,但你并不是必须这样做。

MVC与3D游戏相关性很好,MVC不仅适用于信息系统。考虑一下: 在3D图形中,模型是地图,多边形及其位置和颜色。视图是从中查看场景的摄像机,位置,缩放和方向。控制器解释键盘和鼠标并操纵相机(视图)和场景(模型)。

如果这是一个射击游戏,那么: 用户按下前进按钮,控制器向前移动相机。 用户按下投掷手榴弹按钮,控制器向场景添加手榴弹。

视图是演示,模型是存储/结构,控制器介于两者之间,告诉视图显示什么以及如何根据系统状态显示它。

通常,您将视图中的所有格式,模型和逻辑中的数据放入控制器。