MVC元素之间的关系

时间:2011-08-21 11:40:45

标签: model-view-controller design-patterns

有人可以解释MVC(与活动模型)元素之间的关系,画在这张图片上吗?

MVC

我这样看:

  1. 控制器→模型 - 控制器更改模型的数据。
  2. 模型→视图 - 模型通知视图有关更改。
  3. 视图→模型 - 视图从模型中获取数据。
  4. 查看→控制器 - 视图通知控制器用户的操作(例如,按下按钮)。
  5. 控制器→视图 - 但是我认为这种关系是不必要的,并且与MVC关于独立于视图开发控制器的规则相矛盾:它应该通过模型进行交互。

3 个答案:

答案 0 :(得分:1)

MVC 是一个相当广泛的主题,这个模式有很多变种,还有很多实现。我已经看到了一个解决方案,其中控制器的一个职责是创建一个附加了相关模型的View实例。这可能是你正在寻找的关系。

另一件事 - 在我看来,独立于视图的控制器的存在是现实场景中的神话。迟早你需要提供一个明确收紧视图 - 控制器关系的功能,并且在没有特定视图的情况下无法使用(或者只是不同)。除此之外,接受不同类型的视图表现不同的事实并通过构建定制的控制器而不是假装我们可以只处理一个用户交互的每个方面来将其转化为优势的效率要高得多。

答案 1 :(得分:0)

我认为模型和视图之间的关系是错误的(至少是可靠的)。我在MVC模式中看到它的方式是一切都通过控制器。因此,在视图中,用户选择他想要查看的数据。此请求被发送到控制器。控制器将获取模型中的数据,模型将返回所请求的数据。然后控制器将其发送回视图,视图将其输出给用户。

答案 2 :(得分:0)

至于 controller->视图关系,您已突出显示

  • 控制器需要能够选择显示的相应视图

AFAIK,这是控制器与视图的唯一关系(除了视图路由消息到控制器)。 MVC与MVVM / MVP略有不同,因为每个控制器不一定只有一个视图。例如,您可以拥有一个用户控制器,您可能有一个显示信息的视图,一个用于编辑用户,一个用于添加用户。使用其他两种方法,视图与ViewModel或Presenters之间存在一对一的关系。

  • 独立于视图的控制器不是神话

也许我没有在其他场景中使用过足够的MVC,但我始终保持控制器独立于视图。实际上,如果您的控制器中有任何视图代码(即使用ListBoxEventArgs的函数,引用视图组件等),那么您还没有实现此模式的目标,即将视图与逻辑和模型分开。我相信ASP.NET MVC通过让一些类来管理跟踪启动的视图,使视图完全独立于控制器。这个类可供所有控制器使用(通过继承但依赖注入也很好),然后每个控制器只选择一个视图以使用该类显示。可以使用常量或字符串选择视图(事实上,我相信甚至可以选择它们而不使用参数并基于方法名称)。


查看 - >控制器关系

使用ASP.NET MVC,视图也独立于控制器,因为事件通过URL路由到控制器。然而。在其他非Web情况下,只需通过直接调用后面代码中的控制器方法将事件转发给控制器即可。


实施细节

在我的博客上,我写了一篇文章,介绍了MVC的实现,应该有助于回答你的问题。

<强> MVVM vs MVP vs MVC: The differences explained

就我个人而言,我认为图表中显示的MVC类型并不像过去那样经常被使用,并且可能很难找到使用这些关系的示例。原因是如果视图能够与模型对话,那么我认为开发人员将选择MVC或MVVM(并使用视图模型)而不是MVC。我能想到的唯一情况是视图无法与模型持续对话,这是在服务器客户端情况下。在这种情况下,有许多流行的MVC框架,如ASP.NET MVC今天仍然流行。