大話MVP架構模式(1)-Basic

Model-view-presenter(MVP)是Model-view-controller(MVC)的派生,通常用於UI構建。在MVP中,presenter充當着“中間人”的功能。在MVP中,所有的表示邏輯都推給presenter。

model-view-presenter最早起源於90年代的Taligent——一個由Apple、IBM和Hewlett-Packard合資的企業。MVP是在Taligent基於C++的CommonPoint環境中開發應用的的底層編程模型。後來Taligent將這個模式移植到了java,隨後又由Taligent的CTO Mike Potel在一篇論文中推廣開來。

1998年(MVP在)Taligent(的發展)中斷之後,Dolphin Smalltalk的Andy Bower和Blair McGlashan改編了MVP模式作爲Smalltalk的UI框架的基礎。2006年,Microsoft開始將MVP納入其文檔和示例中,用於.NET框架中的用戶界面編程。

Martin Fowler和Derek Greer所寫的一篇文章詳細討論了MVP模式的演化和多種變體,包括MVP與其他設計模式(如MVC)的關係。

概述

MVP是用戶界面的架構模式,旨在促進自動化單元測試,並改善表達邏輯中的關注點分離(the separation of concerns)。

  • model是一個定義在用戶界面中要展示或其他操作的數據的接口。
  • view是一個被動接口,它展示數據(the model),並將用戶命令(事件)發送給presenter以根據該數據進行操作。
  • presenter對model和view進行操作.它從存儲庫(the model)中檢索數據,並將其格式化以便在view中顯示。

通常view的實現實例化具體的presenter對象,並向其(the presenter)提供自身(the view)的引用。下文中的C#代碼演示了一個簡單的view構造,這裏ConcreteDomainPresenter實現了IDomainPresenter接口:

public class DomainView:IDomainView{
    private IDomainPresenter domainPresenter = null;

    public DomainView(){
        domainPresenter = new ConcreteDomainPresenter(this);
    }
}

view中能容許的邏輯度在不同的實現中是不同的。極端情況下,view是完全被動的,將所有的交互操作交給presenter.在這種構想中,當用戶觸發一個view的事件方法,它除了調用presenter的一個無參無返回值的方法外不做任何事,然後presenter通過view接口定義的方法從view中檢索數據,最後presenter對model進行操作,使用交互結果更新view.

其他版本的model-view-presenter允許某個緯度對特定的交互、事件和命令進行處理。這通常更適合於基於Web的結構中,這種結構中,view在用戶瀏覽器上執行,可能是處理交互命令的最佳場所。

從view的分層角度來看,presenter類可能屬於多層結構系統中的應用層,但它也可視爲它自己在應用層和用戶界面層之間的展示層。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章