【郭林专刊】MVC已过时,MOVE时代来临?
MVC是一個(gè)很常用的程序開(kāi)發(fā)設(shè)計(jì)模式,M-Model(模型):封裝應(yīng)用程序的狀態(tài);V-View(視圖):表示用戶(hù)界面;C-Controller(控制器):對(duì)用戶(hù)的輸入作出反應(yīng),創(chuàng)建并設(shè)置模型。
關(guān)于這個(gè)話題由來(lái)已久,MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很大的應(yīng)用程序通常會(huì)得不償失。在實(shí)際使用中,開(kāi)發(fā)人員在不知道把代碼放在哪里的時(shí)候,都喜歡把代碼放在Controller里面。
為了解決上述問(wèn)題,LinkedIn的軟件工程師Conrad Irwin開(kāi)始使用另一種模式:MOVE采用了一個(gè)新的模型:MOVE:Model,Operation,View and Event。日前Conrad Irwin在個(gè)人博客上分享了關(guān)于這種模式的一些觀點(diǎn)。
上面這張圖顯示了MOVE這個(gè)模式的基本架構(gòu)。下面詳細(xì)介紹一下該模式:
- Model:封裝所有應(yīng)用程序?qū)ο蟆?/li>
- Operation:封裝所有應(yīng)用程序執(zhí)行的動(dòng)作。
- View:應(yīng)用程序和用戶(hù)之間的中介。
- Event:鏈接所有組件事件。
為了避免面條式代碼,應(yīng)該允許每種對(duì)象類(lèi)型。在上圖中,已經(jīng)用箭頭標(biāo)明出來(lái),例如,View允許通過(guò)Mdoel去監(jiān)聽(tīng)Event、可以允許改變模型,但Model不應(yīng)該只參照View或Operation。
Model
以一個(gè)“用戶(hù)”對(duì)象為例,這個(gè)Model至少有一個(gè)email、姓名和電話號(hào)碼這幾個(gè)屬性。
在MOVE應(yīng)用程序模型中Model只封裝了簡(jiǎn)單的方法。這也就意味著除了getters和setters,還會(huì)包含一些驗(yàn)證函數(shù),比如:“密碼正確嗎?”。但不包含把數(shù)據(jù)保存到數(shù)據(jù)庫(kù)或者加載數(shù)據(jù)到外部API中的方法,這些都應(yīng)該是Operation來(lái)完成的事情。
Operation
應(yīng)用中,比較常見(jiàn)的Operation應(yīng)用是一個(gè)用戶(hù)登錄程序。它實(shí)際上是由兩個(gè)子操作完成的:首先,從user中獲取郵箱地址和密碼,其次從數(shù)據(jù)庫(kù)中讀取user對(duì)象信息,并且檢查兩者數(shù)據(jù)是否匹配。
在MOVE模型中,Operation永遠(yuǎn)都是一個(gè)執(zhí)行者。負(fù)責(zé)對(duì)Model進(jìn)行修改、適時(shí)顯示正確的視圖給用戶(hù)、對(duì)用戶(hù)觸發(fā)的事件做出響應(yīng)。在一個(gè)分解良好的應(yīng)用程序中,相對(duì)Operation每個(gè)sub-operation都可以在其中單獨(dú)運(yùn)行。這就是為什么Event箭頭向上而Changes向下。
這樣做的好處在于:在程序運(yùn)行時(shí),開(kāi)發(fā)者可以把整個(gè)應(yīng)用當(dāng)作一個(gè)Operation。如果需要,它還可以盡可能地分解為更多的sub-operation,而每一個(gè)sub-operation都可以并行運(yùn)行,然后在它們都結(jié)束時(shí)程序結(jié)束運(yùn)行。
View
登錄界面就是一個(gè)視圖,顯示幾個(gè)文本框。當(dāng)用戶(hù)點(diǎn)擊“登錄”按鈕時(shí),視圖將產(chǎn)生一個(gè)“l(fā)oginAttempt”事件,并且把用戶(hù)輸入的用戶(hù)名和密碼傳送過(guò)去。
視圖就是用戶(hù)看到的整個(gè)界面并且用戶(hù)還可以通過(guò)界面與程序進(jìn)行交互。它們不僅會(huì)以一個(gè)易于理解的方式來(lái)顯示應(yīng)用程序,而且還可以把用戶(hù)傳入的信息簡(jiǎn)化成有意義的事件來(lái)與用戶(hù)進(jìn)行交流。
重要的是,視圖并不會(huì)直接改變模型,它們只會(huì)發(fā)出事件給Operation,并且等待Model發(fā)出事件響應(yīng)。
Event
用戶(hù)點(diǎn)擊登錄按鈕時(shí),視圖會(huì)產(chǎn)生一個(gè)“l(fā)oginAttempt”事件。此外,當(dāng)?shù)卿涍@個(gè)操作完成后,“currentUser”模型會(huì)發(fā)出一個(gè)事件去通知你的應(yīng)用程序。
事件監(jiān)聽(tīng)和MVC/MOVE里的控制剛好相反,開(kāi)發(fā)者需要允許Model去更新View,即使在Model不清楚哪個(gè)View正在更新。
總結(jié)
本文并不是強(qiáng)調(diào)MVC有多糟糕,在過(guò)去的幾十年里,它以難以置信的方式成功構(gòu)建了許多大型應(yīng)用程序。但它畢竟是幾十年前為老技術(shù)而設(shè)計(jì)的,而MOVE作為一個(gè)新技術(shù),在原有的基礎(chǔ)上進(jìn)行升級(jí),以更好的適應(yīng)軟件開(kāi)發(fā)的需求。(編譯:張紅月)
原文:MVC is dead, it's time to MOVE on
轉(zhuǎn)載于:https://www.cnblogs.com/javaTest/archive/2012/07/12/2589568.html
總結(jié)
以上是生活随笔為你收集整理的【郭林专刊】MVC已过时,MOVE时代来临?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: zip unzip 命令
- 下一篇: GridView自定义分页