MVC:视图和控制器的基数关系

时间:2010-02-25 14:36:05

标签: model-view-controller software-design

在MVC的一般意义上,视图和控制器的关系通常预期为M:1?也就是说,许多视图将使用相同的控制器?但是一个视图不会使用很多不同的控制器?

或者,我应该能够与任何控制器交换任何视图并让一切正常吗?我发现这两者之间存在相当紧密的依赖关系,所以这对我当前的布局不起作用......

我正在尝试为类项目设计一些东西,而且我不确定如何组织/设计我的视图和控制器。

更新:到目前为止我收到的答案很有帮助但不是确定的。让我们稍微扩展我的问题。回想起来,一个重要的方面是模型可以改变(策略模式*)。在一个实例中,模型可以创建数据库。在另一个中,它可以从数据库中读取。我最初的设计目标是获得一个能够处理所有模型的统一(尽管简单)视图。

*我读过(here)可以将Controller视为策略模式实现。我的模型将以类似但独立的方式实施。

这是概念的快速(不完整)类图(给定更新的信息):

Class Diagram of my MVC implementation concept http://theopensourceu.com/wp-content/uploads/2010/02/MVC-2334703.png

2 个答案:

答案 0 :(得分:1)

视图确实并且不应该知道有关控制器的任何信息。在这方面,我想说,这种关系是不存在的。

视图接收模型并显示它。谁准备这个模型原则上是无关紧要的。

当然,在实践中,边界有时会融化。出于某种原因,例如简化代码依赖性,视图有时会了解控制器烧毁的内容。但是,如果你在谈论纯粹的概念讨论,那么不,控制器和视图之间没有直接的联系。相反,他们通过中介进行沟通,这是一种模式。

           ControllerX
--------------------------------
Model1       Model2       Model3
   |            |            |
View1        View2        View3

原则上可以由多个控制器输出相同的视图。如果一个控制器能够实例化一个模型,那么它就非常有用了。

答案 1 :(得分:0)

我对MVC结构的看法是:

控制器 - 最重要的部分。如果你只需要使用一块MVC,那就是这个。我让我的控制器从模型中调用数据,然后将数据(以及我需要的任何其他位)传递到视图(或嵌套视图)中,然后发送给用户。

也就是说,一个控制器可以使用许多模型和视图 - 但不是相反。