中国a级毛片免费观看,啦啦啦资源视频在线完整免费高清,真人性囗交69视频,日本毛X片免费视频观看视频

rexian

咨詢電話:023-6276-4481

熱門文章

聯(lián)系方式

電 話:023-6276-4481

郵箱:broiling@qq.com

地址:重慶市南岸區(qū)亞太商谷6幢25-2

當(dāng)前位置:網(wǎng)站首頁(yè) > 技術(shù)文章 > 深度探討MVC式Web架構(gòu)演進(jìn):多形態(tài)發(fā)展

深度探討MVC式Web架構(gòu)演進(jìn):多形態(tài)發(fā)展

編輯:T.T 發(fā)表時(shí)間:2017-10-16 12:20:49
T.T

MVC(模型-視圖-控制器,Model-View-Controller)最初用于設(shè)計(jì)和實(shí)現(xiàn)狹義的桌面圖形用戶界面(GUI)應(yīng)用開發(fā)。經(jīng)典的MVC與面向?qū)ο蟮某绦蜷_發(fā)方法一樣,已成為每一代軟件開發(fā)人員所最早接觸到的軟件開發(fā)原則之一。雖然MVC對(duì)當(dāng)今的工業(yè)界有著如此重要的影響,但是在日益互聯(lián)計(jì)算的時(shí)代,很明顯MVC的內(nèi)涵已迷失了其精準(zhǔn)性。這在過(guò)去20年間對(duì)于WUI(Web圖形界面,Web Graphical Interface)開發(fā)領(lǐng)域尤其是如此?;谝陨显颍疚囊庠趯?duì)MVC的起源做概要地闡述之后,進(jìn)而深入地探討基于Web的MVC的演進(jìn)和變化

  在WUI的應(yīng)用場(chǎng)景下,原始MVC及MVC三元組中成員對(duì)象的歷史意義和內(nèi)涵在不斷地演變和轉(zhuǎn)變形態(tài)。出于消除任何概念上的混淆的考慮,在本文的探討中將使用“WMVC”一詞表示基于Web的MVC式架構(gòu)模式。大多數(shù)技術(shù)平臺(tái)的WMVC特性正處于不斷地改進(jìn)之中,這包括Microsoft的ASP.NET MVC、PHP的Symfony、Python的Django、Ruby的Merb、Java的JSR 371等。驅(qū)動(dòng)這些平臺(tái)改進(jìn)的原則,很大程度上在于JavaScript已可由客戶端瀏覽器運(yùn)行。此外,不少新的網(wǎng)絡(luò)協(xié)議充實(shí)了服務(wù)器-客戶間的通信。

  自JavaScript被XMLHttpRequest賦予新生以來(lái),它就成為WUI開發(fā)中情有獨(dú)鐘的技術(shù)。在過(guò)去的數(shù)年內(nèi),就有超過(guò)二十種基于WMVC的JavaScript應(yīng)用萌芽發(fā)展,其中包括Dojo、Angular、Ember、Backbone和React等。即使不是全部的也是絕大部分的框架都是側(cè)重于客戶端組件的交互,對(duì)于WMVC視圖和控制器的組成對(duì)象而言尤其是如此。自然而言,WUI開發(fā)方法上的革新再一次引發(fā)了針對(duì)MVC亦或WMVC的大量討論。這些討論時(shí)常是十分激烈的,通常側(cè)重于某個(gè)特定的方面,或基于某個(gè)特定的環(huán)境。進(jìn)而使得MVC(WMVC)衍生出一些主要差異在于控制器對(duì)象的變體,其中包括MVA、MVP、MVVM、Flux、Redux和SAM等。這些MVC變體時(shí)常被統(tǒng)稱為“MV*”,其中的‘*’表示了各變體間的差異主要在于視圖和控制器間的交互方式。通常并不將表示現(xiàn)實(shí)世界視圖對(duì)象的模型組件整體地列入考慮中,或僅是在Web應(yīng)用方案中將模型作為MVC三元組關(guān)系里的被動(dòng)參與者。

  自MVC概念于四十多年前被提出以來(lái),MVC模型很有可能已經(jīng)歷了最重要的改變。在本文的探討中,我們對(duì)MVC模型做了一個(gè)寬泛的定義,這個(gè)定義中涵蓋了駐留內(nèi)存的模型對(duì)象(例如記錄集對(duì)象),還有用于支撐對(duì)象的SoR(主數(shù)據(jù)記錄系統(tǒng),System of Record)中的源數(shù)據(jù)、源文檔、源文件和原始信號(hào),以及所有把它們同步和聚集到一起的過(guò)程。模型數(shù)據(jù)倉(cāng)庫(kù)的存儲(chǔ)形式已從小型軟盤發(fā)展到RDBMS和MMDBMS(多模數(shù)據(jù)庫(kù)管理系統(tǒng),multi-model database management system)。早期模型數(shù)據(jù)倉(cāng)庫(kù)是與駐留內(nèi)存的模型對(duì)象共處一處的,這些模型對(duì)象是獨(dú)立存在于各個(gè)用戶桌面之上的?,F(xiàn)在模型數(shù)據(jù)倉(cāng)庫(kù)使用寬帶連接、分布式或基于云的系統(tǒng),其部署可遠(yuǎn)離域?qū)ο?。存?chǔ)在這種外部環(huán)境中的數(shù)據(jù),可以被企業(yè)生態(tài)系統(tǒng)的多個(gè)系統(tǒng)修改,也可以被消費(fèi)者應(yīng)用的數(shù)以千計(jì)的用戶修改。這種使用場(chǎng)景上的根本差異,已經(jīng)在根本上地改變了模型對(duì)象的行為,進(jìn)而改變了模型對(duì)象與MVC三元組中的另兩個(gè)成員間的通信和交互。

  原型MVC

  oMVC(原型MVC,Original MVC)是由挪威計(jì)算機(jī)科學(xué)家Trygve Reenskaug于1978年提出,當(dāng)時(shí)他工作于著名的Xerox PARC研究中心Smalltalk團(tuán)隊(duì)中。在oMVC的概念初步成型后,最初被實(shí)現(xiàn)為Smalltalk-80類庫(kù)的一部分,用于桌面GUI的建立。

  在那個(gè)時(shí)代,桌面應(yīng)用遠(yuǎn)非當(dāng)前這樣是日常家居中的常見物品,每個(gè)應(yīng)用需要獨(dú)立運(yùn)行于一臺(tái)機(jī)器上,而每臺(tái)機(jī)器的存儲(chǔ)是有限的并且是各自獨(dú)立的。正如在圖1中所示,對(duì)oMVC模型對(duì)象的任何操作都完全由用戶行為通過(guò)控制器所觸發(fā),MVC三元組在受控的環(huán)境中進(jìn)行通信、同步并保持狀態(tài)??刂破鞯闹饕饔檬蔷S持用戶和系統(tǒng)之間的聯(lián)系(參見圖1)??刂破鲗?shí)現(xiàn)對(duì)相關(guān)GUI組件的部署,并在屏幕上將這些GUI組件展現(xiàn)給用戶。在Win95出現(xiàn)之前的年代中,這是一個(gè)具有挑戰(zhàn)性的任務(wù),因?yàn)楫?dāng)時(shí)MS-DOS依然是占據(jù)主要地位的操作系統(tǒng)。在oMVC模型中,一旦用戶產(chǎn)生了某種動(dòng)作,例如菜單選取、在輸入框中輸入、按鈕點(diǎn)擊等,控制器就會(huì)轉(zhuǎn)化這些動(dòng)作為對(duì)應(yīng)的改變消息,向模型傳遞這些消息,并對(duì)消息進(jìn)行處理。

圖1展示了獨(dú)立桌面環(huán)境中的oMVC

  圖1中顯示了作為模型的組成部分的本地軟盤數(shù)據(jù)存儲(chǔ)。oMVC中控制器和視圖具有成對(duì)出現(xiàn)的關(guān)系,但是模型的改變并不在兩者間直接產(chǎn)生通信??刂破骱鸵晥D知道模型的狀態(tài),但是反之并非如此。

  一旦模型從控制器獲取了變更通知,它并不直接通過(guò)調(diào)用去更新所涉及的視圖。在模型-視圖的關(guān)系中,變更通知的獲取是通過(guò)每個(gè)獨(dú)立的參與者之間的相互注冊(cè)實(shí)現(xiàn)。一旦一方發(fā)生了變更,就會(huì)生成一個(gè)事件,對(duì)方就會(huì)采取相應(yīng)的動(dòng)作作為響應(yīng)。在圖1中,視圖是附屬于模型的,對(duì)模型進(jìn)行觀察。一旦控制器觸發(fā)了模型變更事件,視圖必須去確保自身顯示也按需更新,以相應(yīng)地反映出模型的狀態(tài)。更新模型的通知信號(hào)也可由視圖自身生成。這種視圖與模型之間的觀察(或訂閱)和通知關(guān)系,有助于模型和視圖間的解耦,使得多個(gè)視圖可隸屬于同一模型,進(jìn)而可提供不同的表示。

  在圖1中值得注意的是,控制器并非直接地改變視圖。在Smalltalk社區(qū)及其它后續(xù)的桌面GUI應(yīng)用庫(kù)中,通常將視圖和控制器看成一對(duì)耦合的對(duì)象。視圖使用具有特定控制器類型的實(shí)例實(shí)現(xiàn)預(yù)期的響應(yīng)。為創(chuàng)建所期望的行為,控制器還可以在不同情景中策略性地、動(dòng)態(tài)地切換類型。這樣的視圖-控制器對(duì)可以嵌套于復(fù)合層次結(jié)構(gòu)中(如圖2A所示)。在該層次結(jié)構(gòu)中的父輩之間、子女之間及父子之間,視圖-控制器組件都可以進(jìn)行交互和通信。很多情況下,層次結(jié)構(gòu)中的每個(gè)獨(dú)立視圖-控制器的子女組件僅處理部分的模型對(duì)象。此外,從oMVC組合的角度看,模型也可以使用層次結(jié)構(gòu)的形式進(jìn)行組織,這樣MVC三元組作為一個(gè)整體構(gòu)成層次結(jié)構(gòu)中的父子關(guān)系,如圖2B所示。

  圖2左圖是oMVC的復(fù)合表示,右圖是PAC(顯示-抽象-控制,Presentation-Abstraction-Control)的表示。

  總而言之,oMVC設(shè)計(jì)范例是由一系列的GoF設(shè)計(jì)模式所組成,尤其是其中包括了觀察者模式、策略模式和復(fù)合模式。在早期的桌面應(yīng)用庫(kù)中,oMVC域架構(gòu)和模式的設(shè)計(jì)意圖得以保持,即模型組件由應(yīng)用域?qū)ο蠛蛿?shù)據(jù)存儲(chǔ)所組成,其中存儲(chǔ)多是本地的或是受限的。在oMVC三元組類的行為中,應(yīng)用域行為的維護(hù)和廣播起著核心的作用。oMVC的一個(gè)關(guān)鍵假設(shè)是模型的穩(wěn)定性,該假設(shè)在上世紀(jì)七十和八十年代的桌面應(yīng)用情景中顯然是正確的。但是在WMVC領(lǐng)域,模型時(shí)常發(fā)生改變通常是一種常態(tài)。直至近些年,向用戶實(shí)時(shí)廣播變更(類似于oMVC所實(shí)現(xiàn)的)所需的技術(shù)基礎(chǔ)才得以實(shí)現(xiàn)。

  WMVC的分類

  具有諷刺意味的是,雖然直到上世紀(jì)九十年代,尤其是在Win95出現(xiàn)之后的年代,桌面計(jì)算機(jī)開始進(jìn)入普通百姓家并得到普及,但是傳統(tǒng)的桌面應(yīng)用卻因?yàn)橐蛱鼐W(wǎng)互聯(lián)的Web應(yīng)用開始統(tǒng)治了業(yè)界而逐漸退居幕后。不同于安裝并于運(yùn)行于終端用戶計(jì)算機(jī)上的桌面應(yīng)用,Web應(yīng)用是宿主于遠(yuǎn)離用戶的服務(wù)器上,創(chuàng)建了客戶-服務(wù)器的關(guān)系。在本文的其后內(nèi)容中,我們將瀏覽器(browser)和客戶(client)這兩個(gè)概念互換使用。根據(jù)瀏覽器和服務(wù)器相對(duì)于WMVC三元組對(duì)象的部署位置和執(zhí)行方式的不同,可將WMVC明確地分組為:

  1. 服務(wù)器端WMVC (Server-side WMVC,sWMVC):所有WMVC的組件位于服務(wù)器上,并在服務(wù)器上執(zhí)行。

  2. 雙重WMVC(Dual WMVC,dWMVC):WMVC組件分布于瀏覽器和服務(wù)器之間。通信可由客戶或者服務(wù)器端發(fā)起。

  3. 點(diǎn)對(duì)點(diǎn)WMVC(Peer-to-Peer WMVC,pWMVC):這種架構(gòu)中沒有集中式服務(wù)器。所有WMVC組件位于客戶端,在客戶端執(zhí)行。pWMVC可具有自己的沙箱SoR。

  服務(wù)器端WMV(sWMVC)

  在sWMVC模型中,用戶使用瀏覽器作為瘦客戶,通過(guò)無(wú)狀態(tài)的請(qǐng)求-響應(yīng)HTTP協(xié)議訪問(wèn)應(yīng)用(如圖3所示)。客戶向服務(wù)器發(fā)送HTTP請(qǐng)求或輸入內(nèi)容,接收并顯示整個(gè)更新的Web頁(yè)面(或是其它的文檔)。一旦頁(yè)面被加載以后,各頁(yè)面組件間就很少有交互了,頁(yè)面成為靜止的。

  在這種瘦客戶-服務(wù)器范式的sWMVC架構(gòu)中,應(yīng)用SoR版本庫(kù)外部化為一種集中式環(huán)境。它與應(yīng)用服務(wù)器內(nèi)存中的域?qū)ο笫窍嗷シ蛛x的。服務(wù)器和數(shù)據(jù)版本庫(kù)都是遠(yuǎn)離用戶瀏覽器部署的(如圖3所示)。SoR存儲(chǔ)常常是由一個(gè)或多個(gè)關(guān)系數(shù)據(jù)庫(kù)這樣的數(shù)據(jù)源所組成。鑒于數(shù)據(jù)已經(jīng)外部化了,帶外進(jìn)程或不同的用戶都可對(duì)數(shù)據(jù)進(jìn)行更新。數(shù)據(jù)的變更只會(huì)從控制器流向模型(參見圖3);當(dāng)SoR中數(shù)據(jù)被不同的用戶或系統(tǒng)改變時(shí),并不向應(yīng)用服務(wù)器發(fā)送入站數(shù)據(jù)變更通知。不同于oMVC,模型及其所關(guān)聯(lián)的視圖間不再有任何的直接聯(lián)系和必要的同步。由于視圖不再反映模型的狀態(tài),這就需要用戶手動(dòng)地發(fā)起新的HTTP請(qǐng)求去同步和刷新視圖。因此sWMC中的“s”,也可指代這種WMVC范例的靜態(tài)(static)或是陳舊(stale)的本質(zhì)特性。

  圖3sWMVC范例的一種表示

  圖3中顯示了由服務(wù)器駐留內(nèi)存的域?qū)ο竽P停∕)外部化而得到的SoR。不同于oMVC,控制器不再與用戶交互,而是用于協(xié)調(diào)模型與視圖間的通信。模型數(shù)據(jù)的變更是單向流動(dòng)到外部數(shù)據(jù)存儲(chǔ)中的。

  WMVC的模型可簡(jiǎn)述為一種分層架構(gòu)(如圖4所示)。架構(gòu)的最頂層模型表示了在視圖及其相關(guān)的控制器這個(gè)關(guān)系對(duì)之間的契約關(guān)系。為滿足該契約,在處理?xiàng)V锌砂瑪?shù)個(gè)可變的業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)組件。該契約用于所有與視圖相關(guān)信息的連接,其中的信息可能直接來(lái)自本地SoR,或是數(shù)據(jù)云,或是其它真實(shí)世界中的數(shù)據(jù)源,例如探測(cè)器和數(shù)據(jù)提供系統(tǒng)。

圖4WMVC模型的示意圖

  圖4中顯示W(wǎng)MVC的組成包括了多個(gè)架構(gòu)層次,以及來(lái)自本地或遠(yuǎn)程可訪問(wèn)環(huán)境中的可變數(shù)據(jù)源。

  相對(duì)于在oWMVC中的意義和內(nèi)容(如圖3所示)而言,三元組對(duì)象間的關(guān)系和通信發(fā)生了根本上的轉(zhuǎn)變。與控制器在用戶和oMVC系統(tǒng)(圖1)間所起的作用不同,sWMVC的控制器承擔(dān)了在更高層級(jí)上協(xié)調(diào)視圖和模型的角色(參加圖3)。視圖和模型間的通信通過(guò)控制器發(fā)生。用戶與視圖進(jìn)行交互,將模型與模型視圖關(guān)聯(lián)的行為邏輯包含在控制器中,由控制器負(fù)責(zé)管理輸入、更新模型并產(chǎn)生適當(dāng)?shù)妮敵觥?/p>

  Web應(yīng)用的架構(gòu)環(huán)境與桌面應(yīng)用的有所不同,對(duì)于將MVC引入到早期Web應(yīng)用架構(gòu)的設(shè)計(jì)中,雖然這在本質(zhì)上忽視了MVC的原生結(jié)構(gòu)。但是這種引入反而接收了MVC模型的基本理念,即將這三個(gè)相互作用的、多變責(zé)任的對(duì)象類進(jìn)行相互分離是十分重要的。該做法將oMVC范例提升為UI設(shè)計(jì)中在更加通用層次上的架構(gòu)原則,增加了對(duì)任意類型UI應(yīng)用的靈活性和可維護(hù)性。

  sWMVC中通常包含有多種設(shè)計(jì)模型,其中也包括在oMVC中所使用的設(shè)計(jì)原則。例如,各個(gè)用例的控制器原則和行為可能都是不同的,包括中介者模式、調(diào)度者模式、使用狀態(tài)模式和模板方法模式的策略模式代理等。但是在oMVC中,觀察者模式在觸發(fā)三個(gè)對(duì)象類型間的通信中起著關(guān)鍵的作用,尤其是當(dāng)該模式與視圖做相關(guān)的更新時(shí)。在sWMVC實(shí)現(xiàn)中,觀察者的作用被縮減了。這樣導(dǎo)致了sWMVC的靜態(tài)和陳腐的特征。直至近些年,技術(shù)的進(jìn)展才使得交互式和富Web用戶體驗(yàn)成為可能。

  雙重WMVC(dWMVC)

  在Web時(shí)代的早期,由于瀏覽器的普遍使用,為使現(xiàn)有的桌面交互應(yīng)用支持Web做出了不懈的努力。這些工作的一個(gè)成果體現(xiàn)為Microsoft的Outlook Web項(xiàng)目所研發(fā)的一種基于Web的新組件,該組件允許客戶端腳本發(fā)布異步HTTP請(qǐng)求到服務(wù)器。該工作引導(dǎo)了XMLHttpRequest(XHR)協(xié)議的建立和標(biāo)準(zhǔn)化。該協(xié)議是至上世紀(jì)末為止最具有革命性的工作。XMLHttpRequest隨后成為AJAX技術(shù)的基本原則。

  當(dāng)前,基于這種技術(shù)的架構(gòu)使得dMWVC的視圖-控制器對(duì)可以動(dòng)態(tài)分布,并可安裝到用戶桌面、移動(dòng)設(shè)備或其它設(shè)備的瀏覽器上。瀏覽器組件與服務(wù)器上模型間的異步通信,用于同步給定的或者所有的視圖元素的dWMVC三元對(duì)象組狀態(tài),進(jìn)而提供給用戶對(duì)現(xiàn)實(shí)世界或模型對(duì)象的最新認(rèn)知。這種技術(shù)的引入使得XHR切實(shí)地豐富了客戶應(yīng)用,為瀏覽器用戶帶來(lái)了交互式的用戶體驗(yàn)。

  XHR技術(shù)還引發(fā)了單頁(yè)應(yīng)用(SPA)開發(fā)技術(shù)的發(fā)展。類似于oMVC應(yīng)用,SPA是駐留在單一頁(yè)面上的Web網(wǎng)站,提供了無(wú)縫的瀏覽體驗(yàn)。對(duì)于用戶而言,SPA看上去在從一個(gè)頁(yè)面到另一個(gè)頁(yè)面時(shí)并沒有任何頁(yè)面重載,對(duì)不同頁(yè)面渲染所需的資源是在所需時(shí)由幕后的服務(wù)器動(dòng)態(tài)且異步加載的。SPA和這種dWMVC應(yīng)用的交互行為的組合使此類范式劃分為了富互聯(lián)網(wǎng)應(yīng)用(RIA)的最新條目。

  就XHR協(xié)議自身而言,從客戶端的視圖-控制器對(duì)象到服務(wù)器端模型間的通信依然僅是單向的通信,需要由視圖發(fā)起某種類型的輪詢機(jī)制去探測(cè)模型上的更改。輪詢是一種資源密集型操作,因而成為影響性能的一個(gè)關(guān)注點(diǎn)。類似于圖1所示的oMVC,在理想情況下模型中的任何更改應(yīng)會(huì)被實(shí)時(shí)發(fā)布到、或是廣播到所有相關(guān)的視圖-控制器組件中。圖5顯示了dWMVC架構(gòu)的視圖和模型間的雙向異步同步(通過(guò)控制器)。該機(jī)制提供了完全動(dòng)態(tài)的狀態(tài)同步,這種同步基于dWMVC組件間的訂閱-發(fā)布機(jī)制。一些近期的技術(shù)發(fā)展,其中包括服務(wù)器發(fā)送事件(Server-Sent Events,SSE)、WebSocket和入站數(shù)據(jù)庫(kù)通知技術(shù)等,使得該同步操作成為可能。

圖5dWMVC的示意圖

  圖5中顯示了三元組對(duì)象在客戶和服務(wù)器間的分布。由SoR發(fā)起的入站更改通知導(dǎo)致了模型和視圖間的實(shí)時(shí)雙向更新。

  SSE機(jī)制作為HTML5的組成部分,允許服務(wù)器端組件異步啟動(dòng),并將數(shù)據(jù)從服務(wù)器端組件實(shí)時(shí)推送到瀏覽器??蛻舳私M件可以使用SSE發(fā)起請(qǐng)求,向服務(wù)器申請(qǐng)建立一個(gè)非傳統(tǒng)的HTTP連接。一旦客戶端組件接收到所發(fā)起的請(qǐng)求,它繼續(xù)對(duì)隨后的服務(wù)器響應(yīng)進(jìn)行監(jiān)聽。與此同時(shí),服務(wù)器保持同一客戶-服務(wù)器初始連接是活躍的。一旦新的數(shù)據(jù)可用,服務(wù)器無(wú)需客戶的額外請(qǐng)求,就立刻通過(guò)該初始連接將這些數(shù)據(jù)推送給客戶。這樣,SEE給出了一種從服務(wù)器到客戶瀏覽器的解決方案,該解決方法使用了異步的發(fā)布-訂閱事件通知

  WebSocket是一種提供瀏覽器和服務(wù)器間全雙工連接的通信協(xié)議。當(dāng)客戶發(fā)送初始請(qǐng)求到服務(wù)器時(shí),WebSocket通知服務(wù)器該HTTP連接可能會(huì)升級(jí)為全雙工的TCP/IP WebSocket連接,通知使用了一種特殊的HTTP報(bào)頭。一旦WebSocket連接被建立,就可在需要時(shí)用于在瀏覽器和服務(wù)器間相互發(fā)送數(shù)據(jù)。

  使用SSE和WebSocket通信協(xié)議,服務(wù)器可以異步地將模型駐留內(nèi)存的更改發(fā)布到瀏覽器。但是正如前面所討論過(guò)的,模型架構(gòu)的分層可能會(huì)跨越服務(wù)器的邊界,并可能包括應(yīng)用服務(wù)器之外的外部SoR(參見圖4)。由于SoR中的數(shù)據(jù)記錄可被其他應(yīng)用或用戶修改,因此每當(dāng)這樣的帶外更改發(fā)生時(shí),SoR應(yīng)具有變化數(shù)據(jù)捕獲(change data capture,CDC)機(jī)制去探測(cè)并捕獲更改,實(shí)時(shí)地發(fā)起并推送入站數(shù)據(jù)更改到應(yīng)用服務(wù)器,實(shí)現(xiàn)端到端的雙向發(fā)布-訂閱通信模型(如圖5和圖6所示)。在圖6中,dWMVC輪轂的中心表示了共享的SoR和CDC數(shù)據(jù)源。數(shù)據(jù)的實(shí)時(shí)同步由數(shù)據(jù)源和相關(guān)駐留內(nèi)存域模型對(duì)象之間的雙向交互所維持。在圖6中,每個(gè)輪輻間的微型dWMV表示了一個(gè)獨(dú)立的業(yè)務(wù)應(yīng)用(集成的企業(yè)生態(tài)系統(tǒng)中),或是一個(gè)獨(dú)立的應(yīng)用用戶。

  圖6dWMVC輪圖

  圖中顯示了由SoR發(fā)起的入站更改通知,并顯示所引發(fā)的模型和所有視圖間的實(shí)時(shí)雙向更新情況(以微型WMVC展示)。

  基于Web的架構(gòu)棧中加入了XHR-Ajax、SSE和WebSocket等技術(shù),還有數(shù)據(jù)庫(kù)廠商提供了數(shù)據(jù)庫(kù)入站通信能力,所有這些一起使得傳統(tǒng)oMVC中視圖和模型間的雙向交互通信在dWMVC中得到了復(fù)興。越來(lái)越多的數(shù)據(jù)庫(kù)廠商,包括PostgreSQL、Oracle等傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)廠商和RethinkDB、Cassandra等NoSQL數(shù)據(jù)庫(kù)廠商,已經(jīng)實(shí)現(xiàn)或者規(guī)劃去提供CDC機(jī)制,以改進(jìn)應(yīng)用服務(wù)器的入站推送通知。

  點(diǎn)對(duì)點(diǎn)WMVC(pWMVC)

  對(duì)于上面所論及的兩種WMVC,它們的架構(gòu)語(yǔ)義都是基于客戶-服務(wù)器范例的,即用戶瀏覽器向服務(wù)器發(fā)送HTTP請(qǐng)求,取回服務(wù)器端的內(nèi)容,服務(wù)器則回應(yīng)以包含請(qǐng)求信息的一個(gè)或更多的響應(yīng)。這類方法中,服務(wù)器負(fù)責(zé)存儲(chǔ),并發(fā)送所有內(nèi)容及對(duì)所有請(qǐng)求的響應(yīng)。但是這樣的集中式方法可能會(huì)導(dǎo)致性能上的瓶頸。因?yàn)闉榱酥С炙锌赡艿恼?qǐng)求負(fù)載,需要對(duì)服務(wù)器基礎(chǔ)設(shè)施的資源進(jìn)行適當(dāng)?shù)財(cái)U(kuò)展和復(fù)制。當(dāng)前由于高頻度實(shí)時(shí)內(nèi)容發(fā)布需求在數(shù)量上日益增長(zhǎng),這類方法會(huì)產(chǎn)生問(wèn)題,尤其是在(意料之外的)高通量負(fù)載的期間。最優(yōu)的系統(tǒng)無(wú)疑是那種能以去中心化的方式支持高質(zhì)量終端用戶體驗(yàn)的系統(tǒng),這樣的系統(tǒng)可以使用戶用最短的路由和時(shí)間獲取到數(shù)據(jù)。借助于點(diǎn)對(duì)點(diǎn)(Peer-to-peer,P2P)數(shù)據(jù)交換及通信,終端用戶可以從其它的用戶那里交互、檢索和接收內(nèi)容。無(wú)疑,這樣的架構(gòu)繞開或降低了集中式服務(wù)器的負(fù)載和潛在瓶頸問(wèn)題。

  傳統(tǒng)的點(diǎn)對(duì)點(diǎn)系統(tǒng)需要用戶顯式地安裝專用的桌面應(yīng)用或插件。在WebRTC(Web實(shí)時(shí)通信,Web Real-Time Communication)協(xié)議被標(biāo)準(zhǔn)化并被瀏覽器支持之前,瀏覽器本身并不具備使對(duì)等系統(tǒng)的工作直接相互通信的能力。現(xiàn)在WebRTC標(biāo)準(zhǔn)已被大多數(shù)的瀏覽器所支持。它是一種API定義,提供了無(wú)服務(wù)器的瀏覽器到瀏覽器(瀏覽器P2P)直接數(shù)據(jù)交換和通信范例。WebRTC對(duì)Web應(yīng)用引入了點(diǎn)到點(diǎn)的解決方案,它允許Web瀏覽器打開到其它瀏覽器的直接通信通道,無(wú)需對(duì)每個(gè)Web請(qǐng)求-響應(yīng)的集中式服務(wù)場(chǎng)景進(jìn)行處理(參見圖7和圖8)。

  圖7pWMVC如圖所示,圖中顯示了位于客戶端(瀏覽器)內(nèi)、或由客戶端所控制的所有三元組組件。

  在pWMVC模型中,所有的三元組組件位于并執(zhí)行于客戶端及相關(guān)終端用戶的沙箱中(如圖7所示)。沙箱中包括用戶本地或基于云的SoR存儲(chǔ),這樣的存儲(chǔ)可以被pWMVC應(yīng)用訪問(wèn)。在圖8中,輪輻間的每個(gè)微型pWMVC都代表了一種獨(dú)立用戶瀏覽器環(huán)境。與圖6相比,為便于持續(xù)進(jìn)行的Web通信,pWMVC輪圖中并未涉及集中式服務(wù)器和SoR架構(gòu)?;ヂ?lián)瀏覽器間的微型pWMVC組件狀態(tài)可使用WebRTC通信協(xié)議保持同步。

圖8pWMVC輪圖

  圖8中顯示了由獨(dú)立用戶瀏覽器所發(fā)起的直接無(wú)服務(wù)器P2P變更通知,以及該通知如何導(dǎo)致其它的對(duì)等端視圖進(jìn)行實(shí)時(shí)更新。圖中“M”指代內(nèi)存中模型對(duì)象和用戶SoR。

  總 結(jié)

  MVC本身應(yīng)該被視為是一種無(wú)需考慮任何語(yǔ)義的設(shè)計(jì)原則或方法論。MVC的簡(jiǎn)要內(nèi)涵在于,任何類型的UI應(yīng)用都可被分解為三套相互作用的對(duì)象類。在MVC所應(yīng)用的場(chǎng)景中,應(yīng)該審查該三元對(duì)象類型組的行為。為更好地理解MVC概念,在對(duì)架構(gòu)和特定域程序庫(kù)進(jìn)行實(shí)際設(shè)計(jì)和實(shí)現(xiàn)應(yīng)用時(shí),應(yīng)使用適當(dāng)?shù)拿⑨尅?/p>

  WMVC可看成一種獨(dú)特的原理圖,用于在無(wú)狀態(tài)HTTP域的場(chǎng)景中基于MVC方法論的開發(fā)。WMVC可區(qū)分sWMVC、dWMVC和pWMVC這三種不同的類別。這些類別在機(jī)制上不同于oMVC,即原型MVC??紤]到標(biāo)準(zhǔn)化的網(wǎng)絡(luò)協(xié)議、由特定數(shù)據(jù)庫(kù)技術(shù)所提供的專用入站通信等這樣的最新技術(shù)發(fā)展,基于觀察更改的MVC式“事件循環(huán)”可以滿足基于Web應(yīng)用的需求。這使得WMVC當(dāng)前可為瀏覽器用戶實(shí)現(xiàn)具有完全交互的實(shí)時(shí)豐富WUI體驗(yàn)。

  作者簡(jiǎn)介

  Brent Chen,自上世紀(jì)九十年代以來(lái),Brent Chen先生就一直致力于系統(tǒng)架構(gòu)和應(yīng)用開發(fā)。他所提出的解決方案涵蓋了眾多的專業(yè)領(lǐng)域,其中包括:工資管理、人力資源管理、職工福利管理、監(jiān)管合規(guī)、衛(wèi)生保健和政府事務(wù)等。Brent Chen先生曾供職于一些主要的解決方案和服務(wù)提供商,諸如:Computer Sciences Corp、Northrop Grumman、ADP、LLC等。他的一個(gè)研究興趣就是去探究當(dāng)前正在發(fā)展的Web架構(gòu)和技術(shù)中的新機(jī)遇和新興前沿領(lǐng)域。