图3sWMVC范例的一种表示。图中显示了由服务器驻留内存的域对象模型(M)外部化而得到的SoR。不同于oMVC,控制器不再与用户交互,而是用于协调模型与视图间的通信。模型数据的变更是单向流动到外部数据存储中的。
WMVC的模型可简述为一种分层架构(如图4所示)。架构的最顶层模型表示了在视图及其相关的控制器这个关系对之间的契约关系。为满足该契约,在处理栈中可包含数个可变的业务逻辑和数据访问组件。该契约用于所有与视图相关信息的连接,其中的信息可能直接来自本地SoR,或是数据云,或是其它真实世界中的数据源,例如探测器和数据提供系统。
图4WMVC模型的示意图。图中显示WMVC的组成包括了多个架构层次,以及来自本地或远程可访问环境中的可变数据源。
相对于在oWMVC中的意义和内容(如图3所示)而言,三元组对象间的关系和通信发生了根本上的转变。与控制器在用户和oMVC系统(图1)间所起的作用不同,sWMVC的控制器承担了在更高层级上协调视图和模型的角色(参加图3)。视图和模型间的通信通过控制器发生。用户与视图进行交互,将模型与模型视图关联的行为逻辑包含在控制器中,由控制器负责管理输入、更新模型并产生适当的输出。
Web应用的架构环境与桌面应用的有所不同,对于 将MVC引入 到 早期Web应用架构 的设计中,虽然这在本质上忽视了MVC的原生结构。但是这种引入反而接收了MVC模型的基本理念,即将这三个相互作用的、多变责任的对象类进行相互分离是十分重要的。该做法将oMVC范例提升为UI设计中在更加通用层次上的架构原则,增加了对任意类型UI应用的灵活性和可维护性。
sWMVC中通常包含有多种设计模型,其中也包括在oMVC中所使用的设计原则。例如,各个用例的 控制器 原则和行为可能都是不同的,包括 中介者模式 、 调度者模式 、使用 状态模式 和 模板方法模式 的 策略模式代理 等。但是在oMVC中,观察者模式在触发三个对象类型间的通信中起着关键的作用,尤其是当该模式与视图做相关的更新时。在sWMVC实现中,观察者的作用被缩减了。这样导致了sWMVC的静态和陈腐的特征。直至近些年,技术的进展才使得交互式和富Web用户体验成为可能。
双重WMVC(dWMVC)
在Web时代的早期,由于浏览器的普遍使用,为使现有的桌面交互应用支持Web做出了不懈的努力。这些工作的一个成果体现为 Microsoft的Outlook Web项目所研发的 一种基于Web的新组件,该组件允许客户端脚本发布异步HTTP请求到服务器。该工作引导了 XMLHttpRequest (XHR)协议的建立和标准化。该协议是至上世纪末为止最具有革命性的工作。XMLHttpRequest随后成为 Ajax 技术的基本原则。
当前,基于这种技术的架构使得dMWVC的视图-控制器对可以动态分布,并可安装到用户桌面、移动设备或其它设备的浏览器上。浏览器组件与服务器上模型间的异步通信,用于同步给定的或者所有的视图元素的dWMVC三元对象组状态,进而提供给用户对现实世界或模型对象的最新认知。这种技术的引入使得XHR切实地丰富了客户应用,为浏览器用户带来了交互式的用户体验。
XHR技术还引发了 单页应用 (SPA)开发技术的发展。类似于oMVC应用,SPA是驻留在单一页面上的Web网站,提供了无缝的浏览体验。对于用户而言,SPA看上去在从一个页面到另一个页面时并没有任何页面重载,对不同页面渲染所需的资源是在所需时由幕后的服务器动态且异步加载的。SPA和这种dWMVC应用的交互行为的组合使此类范式划分为了 富互联网应用 (RIA)的最新条目。
就XHR协议自身而言,从客户端的视图-控制器对象到服务器端模型间的通信依然仅是单向的通信,需要由视图发起某种类型的 轮询机制 去探测模型上的更改。轮询是一种资源密集型操作,因而成为影响性能的一个关注点。类似于图1所示的oMVC,在理想情况下模型中的任何更改应会被实时发布到、或是广播到所有相关的视图-控制器组件中。图5显示了dWMVC架构的视图和模型间的双向异步同步(通过控制器)。该机制提供了完全动态的状态同步,这种同步基于dWMVC组件间的订阅-发布机制。一些近期的技术发展,其中包括 服务器发送事件 (Server-Sent Events,SSE)、 WebSocket 和入站数据库通知技术等,使得该同步操作成为可能。