每当我与开发人员谈论Model View Controller(MVC)时,它们几乎是瞬间的,他们说您向URL发出请求,服务器将建立一个实体(MODEL),并为您提供该模型的可视化表示。
那么这是否意味着MVC 仅适用于Web,或者我是否正在和只是使用MVC编写Web应用程序的开发人员见面?
桌面样式应用程序上有MVC的用法吗?
我是范式的新手,我想知道MVC的任何超集
每当我与开发人员谈论Model View Controller(MVC)时,它们几乎是瞬间的,他们说您向URL发出请求,服务器将建立一个实体(MODEL),并为您提供该模型的可视化表示。
那么这是否意味着MVC 仅适用于Web,或者我是否正在和只是使用MVC编写Web应用程序的开发人员见面?
桌面样式应用程序上有MVC的用法吗?
我是范式的新手,我想知道MVC的任何超集
Answers:
MVC是一种模式。模式适用于所有编程。MVC恰好在Web上下文中运行良好。
正如gnat指出的那样,只需看一下mvc标签,您将看到其实现的多个示例。
考虑到MVC是从1977年,和网络仅在1991年发明的,它应该是很明显的是MVC是不是只针对网页。
在Microsoft环境中提出问题,许多人会假设您是说Asp.Net MVC,这是专门用于Web的MVC实现。
不幸的是,有许多人没有意识到这是MVC模式的实现,并认为它们是可互换的术语,从而导致了“仅Web”的假设。
至少据我所知,MVC的第一个实现是在Smalltalk中。它肯定存在于Smalltalk-80中。尽管我没有任何方便的文档来证明它,但我相信到那时,它(或无论如何都非常相似)已经在Smalltalk中使用了几年。
大多数OO GUI框架至少包括MVC的某些变体。但是,我不确定在这种情况下“超集”到底是什么意思。很难说任何给定的变体是MVC的超集,子集还是对等体,但我倾向于考虑其中大多数对等体。
无论如何,其中许多(大多数?)已用于桌面开发,而不是Web开发。得益于AT&T的一些旧专利,大多数窗口系统都需要程序才能按需重新生成视图。这(几乎)迫使保持当前状态的代码(模型)与显示该状态的代码(视图)之间至少有一定程度的分离。在1)控制器功能的隔离程度以及2)在每个主要部分之间绘制线条的确切细节方面,这仍然留有很大的变化空间。
因此,在该区域中有很多不同的设计模式。
等等。多年来,这些技术已经交织在一起,融合在一起,进行了更改,并在各种情况下得到了应用。这里重要的一点是,1977年以来的MVC设计模式已经发生了很大的变化,不再是服务器端Web框架使用的设计模式。例如,在原始的Smalltalk实现中,模型将观察视图的变化,而不再是这种情况,因为服务器端根本无法在用户浏览器中观察html元素。相反,如果视图更改,则视图将向控制器发送请求,然后控制器将更新视图。再次遵循原始MVC实现,因为对模型的更新将暗示依赖于该模型的所有视图都将被更新。
现代Web框架遵循简单的三层体系结构,也称为Model 2体系结构。
Web上当然有真实的MVC架构的示例,但是它们通常仅是客户端,连接到遵循Model 2架构的服务器,因为视图是xml和json,并且没有观察到更改。客户端纯mvc架构的示例是Sencha Touch和Sproutcore。
如果在浏览器中具有MVC,在服务器上具有mvc,在数据层中具有mvc,则您具有分层mvc实现。
注意。我只讲过Web框架,MVC的其他实现(例如java swing和Flex)还有其他实现差异。
您必须知道的一件事是,与声称实现MVC的框架一样,MVC的形式也很多。
大多数人都同意模型拥有某种状态,而视图则呈现了这一事实。但是Controller的角色非常不同。
在Smalltalk最初描述的地方,模型是应用程序,数据和业务方法的核心。视图是应用程序状态(即模型)状态的图形表示,控制器负责管理用户输入,鼠标和键盘事件。例如,Controller将键盘事件路由到具有焦点的view元素。
在.jsp页面中,模型主要是数据,视图将模型呈现为HTML,而控制器将模型路由到适当的视图以进行呈现。
因此,为回答您的问题,虽然MVC同时用于独立应用程序(Java,.Net,Flex)和Web(jsp页面),但这是完全不同的事情。这意味着您知道的MVC不会在独立应用程序中使用。