MVC - 是查看模型还是控制器查看?

时间:2015-04-12 20:09:44

标签: .net asp.net-mvc model-view-controller

我看到很多网站和文章解释说该视图是从模型更新的,如下面的示例mvc 但是我看到MVC架构的一些其他示例显示视图通过控制器enter image description here

更新

这取决于你的观点中是否有@Model?我只是想知道为什么不同版本的MVC,我们被教导它应该是第二个图像。

1 个答案:

答案 0 :(得分:10)

MVC是一种松散定义的模式,它为架构师提供了对实现细节的自由裁量权。这可能就是为什么存在如此多的MVC变体的原因。

据我所知,这一切都始于经典(原创)MVC,它将Web应用程序分为三个部分,即模型,视图和控制器。目标是:

  • 在模型和视图之间实现松散耦合(观察者模式 用来实现它)。
  • 将业务逻辑封装到模型中,以便它可以是详尽的 测试
  • 尽可能使视图变得愚蠢/稀薄,以减少测试的需要。

A Standard MVC Interaction

模式很吸引人,以至于存在多种变化(主动模型,被动模型,模型2)。这些变化是由于在特定框架中实现模式以适应框架的设计目标。

例如,一个变体是Model2。 Model2是一个Web变体(Classic MVC实际上是桌面应用程序的目标)并且被称为“ASP.NET MVC框架”。

The Model2 Interaction as in the ASP.NET MVC Framework

Classic MVC和ASP.NET MVC Framework之间的关键区别在于,后者提供了Model和View之间的完美分离,即没有直接的交互。而Controller则负责促进ASP.NET MVC框架中Model和View之间的这种通信。这使得ASP.NET MVC Framework Web应用程序变得更加容易和轻松。有效地进行测试。

此外,在Model2中,可以在视图和控制器之间建立一种松散的契约。在ASP.NET MVC框架中,此契约过去由ViewData容器对象表示,现在使用ViewModel对象。

为避免混淆,需要查看当前使用的MVC模式实现中这三个部分(模型,视图和控制器)之间的交互。还要接受这样一个事实,即它是MVC模式的特定实现,并且一个图表可能无法完全描述它。