官术网_书友最值得收藏!

1.3.2 MVP模式介紹

MVP的英文全稱為Model View Presenter,它是從經(jīng)典的MVC模式演變而來的。它們的基本思想有相通的地方:Controller/Presenter負(fù)責(zé)邏輯的處理,Model提供數(shù)據(jù),View負(fù)責(zé)顯示。MVP從MVC演變而來,通過表示器將視圖與模型巧妙地分開。在該模式中,視圖通常由表示器初始化,它負(fù)責(zé)呈現(xiàn)用戶界面(UI),并接收用戶所發(fā)出的命令,但不對(duì)用戶的輸入做任何邏輯處理,而僅僅是將用戶輸入轉(zhuǎn)發(fā)給表示器。通常每一個(gè)視圖對(duì)應(yīng)一個(gè)表示器,但是也可能一個(gè)擁有較復(fù)雜業(yè)務(wù)邏輯的視圖會(huì)對(duì)應(yīng)多個(gè)表示器,每個(gè)表示器完成該視圖的一部分業(yè)務(wù)處理工作,降低了單個(gè)表示器的復(fù)雜程度;一個(gè)表示器也能被多個(gè)有著相同業(yè)務(wù)需求的視圖復(fù)用,增加單個(gè)表示器的復(fù)用度。表示器包含大多數(shù)表示邏輯,用以處理視圖,與模型交互以獲取或更新數(shù)據(jù)等。模型描述了系統(tǒng)的處理邏輯,但對(duì)于表示器和視圖一無所知。

1.MVP模式的優(yōu)點(diǎn)

MVP模式的優(yōu)點(diǎn)體現(xiàn)在以下三個(gè)方面。

(1)View與Model完全隔離。Model和View之間具有良好解耦性的設(shè)計(jì),這就意味著,如果Model或View中的一方發(fā)生變化,只要交互接口不發(fā)生變化,另一方就無須對(duì)上述變化做出相應(yīng)的變化,這使得Model層的業(yè)務(wù)邏輯具有很好的靈活性和可重用性。

(2)Presenter與View的具體實(shí)現(xiàn)技術(shù)無關(guān)。也就是說,采用諸如Windows表單、WPF(Windows Presentation Foundation)框架、Web表單等用戶界面構(gòu)建技術(shù)中的任意一種來實(shí)現(xiàn)View層,都無須改變系統(tǒng)的其他部分。甚至為了使B/S、C/S部署架構(gòu)能夠被同時(shí)支持,應(yīng)用程序可以用同一個(gè)Model層適配多種技術(shù)構(gòu)建的View層。

(3)可以進(jìn)行View的模擬測(cè)試。由于View和Model之間的緊耦合,在Model和View同時(shí)開發(fā)完成前對(duì)其中一方進(jìn)行測(cè)試是不可能的。出于同樣的原因,對(duì)View或Model進(jìn)行單元測(cè)試很困難。MVP模式解決了上述所有的問題。在MVP模式中,View和Model之間沒有直接依賴,開發(fā)者能夠借助模擬對(duì)象注入測(cè)試兩者中的任意一方。

2.MVP模式與MVC模式的區(qū)別

MVP模式示意圖如圖1-1所示。作為一種新的模式,MVP與MVC有著一個(gè)重大的區(qū)別:在MVP中View并不直接使用Model,它們之間的通信是通過Controller來進(jìn)行的,所有的交互都發(fā)生在Controller內(nèi)部;而在MVC中View會(huì)直接從Model中讀取數(shù)據(jù),而不是通過Controller。在MVC中,View是可以直接訪問Model的。View中會(huì)包含Model信息,不可避免地還要包括一些業(yè)務(wù)邏輯。在MVC模式中,更關(guān)注Model的不變,而同時(shí)有多個(gè)對(duì)Model的不同顯示及View。所以在MVC模式中,Model不依賴于View,但View是依賴于Model的。不僅如此,因?yàn)橛幸恍I(yè)務(wù)邏輯在View中實(shí)現(xiàn),導(dǎo)致要更改View也是比較困難的,至少那些業(yè)務(wù)邏輯是無法重用的,代碼復(fù)用率低。

圖1-1 MVP模式

主站蜘蛛池模板: 西林县| 图木舒克市| 基隆市| 莱西市| 临清市| 临泉县| 弥勒县| 泊头市| 清丰县| 获嘉县| 青河县| 凌海市| 筠连县| 临猗县| 阳信县| 河源市| 都匀市| 二手房| 永新县| 盐边县| 沙河市| 任丘市| 呼和浩特市| 岑巩县| 武功县| 天峨县| 南雄市| 荆门市| 孟津县| 郯城县| 罗源县| 拜城县| 阳山县| 绩溪县| 同德县| 孝感市| 如东县| 潞城市| 睢宁县| 城市| 罗定市|