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