2009-04-10 47 views
2

我已经在Web上做了大量有关MVC的工作,我们正在使用OOP类来了解它。我看到了一些差异,我无法分辨这是因为Web版本的MVC模式与传统模式不同,还是我误解了它。Web的MVC版本与传统的MVC不同吗?

从我的理解,模型(你的平面文件,RDBMS'等)是一个通用的数据住房对象。视图(浏览器,HTML等)是用户与之交互的内容,控制器在用户操作和数据之间进行中介。控制器是最具领域特色的部分,它管理视图,告诉模型需要什么,并告诉视图显示什么。

在课堂上,我们有与我刚刚描述的视图匹配的内容,模型包含视图列表,以便在数据更改时更新它们,并且控制器简单地将用户的操作映射到模型的调用,到特定的对象(它们本身可以让模型更新视图)。最终发生的事情是,大多数业务逻辑都在模型中,并且与正在编写的模拟或应用程序有很大的关系,而控制器被简化为命令和方法之间的映射工具。

你对此有何看法?

回答

3

在非web接口中,控制器处理来自诸如键盘和鼠标之类的输入,根据这些输入选择要呈现哪些视图以及在模型中进行哪些更改。视图和模型可以更密切相关,因为视图可以直接向模型实体注册回调以通知更改,因此可以直接对模型的更改进行更新,而不是由控制器更新。

在网络世界中,视图必然与模型更加脱钩。它必须通过控制器动作来执行,因为它无法直接访问(在呈现并传递到浏览器之后)模型。控制器在这个环境中扮演更重要的角色,即使它唯一需要处理的“输入”是浏览器请求。从某种意义上讲,过去与非web MVC中的视图发生的耦合被转移到代表它的控制器上。由于模型没有回应(现在让我们忘记“推”技术),更多的业务代码被整合到控制器中,因为它是模拟业务流程的自然地点,但可能不是验证。

+0

为什么这个好的答案没有得到太多upvotes? Thx! – 2015-02-26 12:53:31

0

在我的理解中,控制器中的MVC模式只是模型和视图之间的桥梁,他们只是从模型中获取数据并将其传递给视图。模型和视图是独立的,从不相互交流。

+0

这就是我的想法。但是,如果你看看http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/images/app-archa2.gif,它说模型会通知变化的观点,这对我来说没有任何意义。 – 2009-04-10 02:48:02

+0

MVC和“三层体系结构”之间有一个有趣的区别请参阅维基百科链接:http://en.wikipedia.org/wiki/Multitier_architecture#Comparison_with_the_MVC_architecture – 2009-04-10 03:17:11