這里的MVP不是微軟的那個(gè)MVP,而是一個(gè)設計模式Model-Viewer-Presenter。最早(2000年)由IBM開(kāi)發(fā)出來(lái)的一個(gè)針對C++和Java的編程模型,它是MVC模式的變種。其目的就在于提供a cleaner implementation of the Observer connection between Application Model and view。
在企業(yè)應用中,對用戶(hù)有用的是各種數據,他們通過(guò)UI以各種不同的方式管理這些數據。對于開(kāi)發(fā)者而言,需要給用戶(hù)提供各種UI,通過(guò)響應用戶(hù)操作UI時(shí)觸發(fā)的各種Event來(lái)執行一定的業(yè)務(wù)邏輯,從而操控數據,數據變化后還需要更新顯示,給用戶(hù)予以提示。UI是容易變化的,且是多樣的,一樣的數據會(huì )有N種顯示方式;業(yè)務(wù)邏輯也是比較容易變化的。為了使得Application具有較大的彈性,我們期望將UI、邏輯(UI的邏輯和業(yè)務(wù)邏輯)和數據隔離開(kāi)來(lái),而MVP是一個(gè)很好的選擇。
和MVC中的Model是一樣的含義——The Domain Data,包括Selection和Command。
圖:
呈現Model,且處理UI的事件(Handle UI Event)。
代替了Controller,它比Controller擔當更多的任務(wù),也更加復雜。Presenter處理事件,執行相應的邏輯,這些邏輯映射到Model的Command以操作Model。那些處理UI如何工作的代碼基本上都位于Presenter。Presenter如同一個(gè)樂(lè )隊的指揮家,表現和協(xié)調整個(gè)Application,它負責創(chuàng )建和協(xié)調其它對象。
Model和View使用Observer模式進(jìn)行溝通;而Presenter和View則使用Mediator模式進(jìn)行通信;Presenter操作Model則使用Command模式來(lái)進(jìn)行。從上面我給的鏈接MVP中可以找到講解MVP的PDF文件,該文檔中詳細說(shuō)明了MVP的設計思想。
如果想知道MVC和MVP有什么不同,那可以看這里。
光看理論還不能掌握一個(gè)架構模式,得看看實(shí)際的例子才行,我在codeproject上發(fā)現一篇不錯的文章《Model View Presenter with ASP.NET》,作者指出了ASP.NET的code-behind編程模型的各種缺點(diǎn),然后講解了如何將MVP應用到ASP.NET Application中,而無(wú)須使用復雜的Framework。
更多的例子:
http://www.mattberther.com/2005/01/000589.html
http://codebetter.com/blogs/jeremy.miller/articles/129546.aspx
http://weblogs.asp.net/pgreborio/archive/2005/01/07/348021.aspx
http://msdn.microsoft.com/msdnmag/issues/06/08/DesignPatterns/default.aspx
如果不介意看smalltalk的話(huà)(其實(shí)關(guān)鍵是思想):
http://www.object-arts.com/docs/index.html?modelviewpresenter.htm
http://www.mimuw.edu.pl/~sl/teaching/00_01/Delfin_EC/Overviews/ModelViewPresenter.htm
另外還有一個(gè)Jean-Paul的 TV。
http://weblogs.asp.net/bsimser/archive/2006/07/18/Model_2D00_View_2D00_Presenter-Pattern-with-SharePoint-Web-Parts.aspx
MVC模式幾乎是人人都知道的,但MVP似乎知名度小得多,很少有人提及。其實(shí)Martin Fowler也講解過(guò)該模式。雖然它創(chuàng )建之初是為了針對C++和Java的,但在象C#這樣的語(yǔ)言中也一樣可以應用它。使用MVP后,我們可以提高對Model和Presenter的復用,比如可以對Model和Presenter不做修改,而能提供ASP.NET Web Form和 Windows Form??傊?,MVP是一個(gè)值得去研究的架構模式。
聯(lián)系客服