
圖3sWMVC范例的一種表示。圖中顯示了由服務(wù)器駐留內(nèi)存的域?qū)ο竽P?M)外部化而得到的SoR。不同于oMVC,控制器不再與用戶交互,而是用于協(xié)調(diào)模型與視圖間的通信。模型數(shù)據(jù)的變更是單向流動到外部數(shù)據(jù)存儲中的。
WMVC的模型可簡述為一種分層架構(gòu)(如圖4所示)。架構(gòu)的最頂層模型表示了在視圖及其相關(guān)的控制器這個關(guān)系對之間的契約關(guān)系。為滿足該契約,在處理棧中可包含數(shù)個可變的業(yè)務(wù)邏輯和數(shù)據(jù)訪問組件。該契約用于所有與視圖相關(guān)信息的連接,其中的信息可能直接來自本地SoR,或是數(shù)據(jù)云,或是其它真實世界中的數(shù)據(jù)源,例如探測器和數(shù)據(jù)提供系統(tǒng)。

圖4WMVC模型的示意圖。圖中顯示W(wǎng)MVC的組成包括了多個架構(gòu)層次,以及來自本地或遠程可訪問環(huán)境中的可變數(shù)據(jù)源。
相對于在oWMVC中的意義和內(nèi)容(如圖3所示)而言,三元組對象間的關(guān)系和通信發(fā)生了根本上的轉(zhuǎn)變。與控制器在用戶和oMVC系統(tǒng)(圖1)間所起的作用不同,sWMVC的控制器承擔(dān)了在更高層級上協(xié)調(diào)視圖和模型的角色(參加圖3)。視圖和模型間的通信通過控制器發(fā)生。用戶與視圖進行交互,將模型與模型視圖關(guān)聯(lián)的行為邏輯包含在控制器中,由控制器負責(zé)管理輸入、更新模型并產(chǎn)生適當(dāng)?shù)妮敵觥?/p>
Web應(yīng)用的架構(gòu)環(huán)境與桌面應(yīng)用的有所不同,對于 將MVC引入 到 早期Web應(yīng)用架構(gòu) 的設(shè)計中,雖然這在本質(zhì)上忽視了MVC的原生結(jié)構(gòu)。但是這種引入反而接收了MVC模型的基本理念,即將這三個相互作用的、多變責(zé)任的對象類進行相互分離是十分重要的。該做法將oMVC范例提升為UI設(shè)計中在更加通用層次上的架構(gòu)原則,增加了對任意類型UI應(yīng)用的靈活性和可維護性。
sWMVC中通常包含有多種設(shè)計模型,其中也包括在oMVC中所使用的設(shè)計原則。例如,各個用例的 控制器 原則和行為可能都是不同的,包括 中介者模式 、 調(diào)度者模式 、使用 狀態(tài)模式 和 模板方法模式 的 策略模式代理 等。但是在oMVC中,觀察者模式在觸發(fā)三個對象類型間的通信中起著關(guān)鍵的作用,尤其是當(dāng)該模式與視圖做相關(guān)的更新時。在sWMVC實現(xiàn)中,觀察者的作用被縮減了。這樣導(dǎo)致了sWMVC的靜態(tài)和陳腐的特征。直至近些年,技術(shù)的進展才使得交互式和富Web用戶體驗成為可能。
雙重WMVC(dWMVC)
在Web時代的早期,由于瀏覽器的普遍使用,為使現(xiàn)有的桌面交互應(yīng)用支持Web做出了不懈的努力。這些工作的一個成果體現(xiàn)為 Microsoft的Outlook Web項目所研發(fā)的 一種基于Web的新組件,該組件允許客戶端腳本發(fā)布異步HTTP請求到服務(wù)器。該工作引導(dǎo)了 XMLHttpRequest (XHR)協(xié)議的建立和標(biāo)準(zhǔn)化。該協(xié)議是至上世紀末為止最具有革命性的工作。XMLHttpRequest隨后成為 Ajax 技術(shù)的基本原則。
當(dāng)前,基于這種技術(shù)的架構(gòu)使得dMWVC的視圖-控制器對可以動態(tài)分布,并可安裝到用戶桌面、移動設(shè)備或其它設(shè)備的瀏覽器上。瀏覽器組件與服務(wù)器上模型間的異步通信,用于同步給定的或者所有的視圖元素的dWMVC三元對象組狀態(tài),進而提供給用戶對現(xiàn)實世界或模型對象的最新認知。這種技術(shù)的引入使得XHR切實地豐富了客戶應(yīng)用,為瀏覽器用戶帶來了交互式的用戶體驗。
XHR技術(shù)還引發(fā)了 單頁應(yīng)用 (SPA)開發(fā)技術(shù)的發(fā)展。類似于oMVC應(yīng)用,SPA是駐留在單一頁面上的Web網(wǎng)站,提供了無縫的瀏覽體驗。對于用戶而言,SPA看上去在從一個頁面到另一個頁面時并沒有任何頁面重載,對不同頁面渲染所需的資源是在所需時由幕后的服務(wù)器動態(tài)且異步加載的。SPA和這種dWMVC應(yīng)用的交互行為的組合使此類范式劃分為了 富互聯(lián)網(wǎng)應(yīng)用 (RIA)的最新條目。
就XHR協(xié)議自身而言,從客戶端的視圖-控制器對象到服務(wù)器端模型間的通信依然僅是單向的通信,需要由視圖發(fā)起某種類型的 輪詢機制 去探測模型上的更改。輪詢是一種資源密集型操作,因而成為影響性能的一個關(guān)注點。類似于圖1所示的oMVC,在理想情況下模型中的任何更改應(yīng)會被實時發(fā)布到、或是廣播到所有相關(guān)的視圖-控制器組件中。圖5顯示了dWMVC架構(gòu)的視圖和模型間的雙向異步同步(通過控制器)。該機制提供了完全動態(tài)的狀態(tài)同步,這種同步基于dWMVC組件間的訂閱-發(fā)布機制。一些近期的技術(shù)發(fā)展,其中包括 服務(wù)器發(fā)送事件 (Server-Sent Events,SSE)、 WebSocket 和入站數(shù)據(jù)庫通知技術(shù)等,使得該同步操作成為可能。