皇家社会vs莱万特
聊城萬拓網絡科技-專業聊城網站建設、聊城網站制作、聊城網站優化、聊城做網站的品牌網站建設專家!

    您當前的位置是:首頁 - 新聞動態 - 網站建設 ? 《Android的上上下下左右左右BA》之淺談MVP架構及開發模式

    《Android的上上下下左右左右BA》之淺談MVP架構及開發模式
     發布時間:2014-04-05  點擊次數: 次   作者:萬拓網絡  來源:lcbaituo.com  Tags:

    Model-View-Presenter(MVP)概述

        MVC模式已經出現了幾十年了,在GUI領域已經得到了廣泛的應用,由于微軟ASP.NET MVC Framework的出現,致使MVC一度成為.NET社區的熱名話題。作為MVC的變種MVP模式,也已經出現好幾年了,在微軟模式與實踐小組提供的Web Client Software Factory中,給出了實現MVP模式的應用程序最佳實踐,本文將試著對這兩種實現比較一二。
    MVC(Model-View-Controller,模型-視圖-控制器)模式是80年代Smalltalk-80出現的一種軟件設計模式,后來得到了廣泛的應用,其主要目的在于促進應用中模型,視圖,控制器間的關注的清晰分離。MVP(Model-View-Presenter,模型-視圖-表示器)模式則是由IBM開發出來的一個針對C++和Java的編程模型,大概出現于2000年,是MVC模式的一個變種,主要用來隔離UI、UI邏輯和業務邏輯、數據。在下面的文字中,如無特別說明,MVC均指ASP.NET MVC Framework。

    Model-View-Presenter(MVP)優缺點
        
    針對ASP.NET MVP Sample實例,在這個實例中MVP模式采用了Castle框架和底層數據映射NHibernate框架,在開發過程中要注意NHibernate的版本的不同,有的支持sql server 2000,有的支持sql server 2005數據庫。IHttpModule接口的實現。其實在使用Castle框架時,IContainerAccessor接口已經封裝了IoC模式。還有泛型編程。事務回滾操作。在編程過程中,你可以保留它現有的模式,也可以增加或改變其模式。
        Model-view-presenter旨在應用程序分層和提高測試效率,它的主要目標是將顯示邏輯與業務邏輯分離,正如我們設計面向對象程序中創建松散耦合并可重用的對象。
    MVP的另一個目標是提高針對View的測試效率。編寫依賴Session, ViewState, AJAX, HTML或web控件和業務實體的單元測試類較為復雜,因此我們將各視圖的顯示邏輯保留在ASPX/ASCX文件類中,并將業務邏輯從中分離出來放在相應的類中,在MVP中Presenter充當視圖和業務邏輯的緩沖層。

       

    MVP與MVC的區別
    MVP——Model-View-Presenter 它是MVC模式的變種。UI是容易變化的,且是多樣的,一樣的數據會有N種顯示方式;業務邏輯也是比較容易變化的。為了使得Application具有較大的彈性,我們期望將UI、邏輯(UI的邏輯和業務邏輯)和數據隔離開來,而MVP是一個很好的選擇。
        Presenter代替了Controller,它比Controller擔當更多的任務,也更加復雜。Presenter處理事件,執行相應的邏輯,這些邏輯映射到Model的Command以操作Model。那些處理UI如何工作的代碼基本上都位于Presenter。Presenter如同一個樂隊的指揮家,表現和協調整個Application,它負責創建和協調其它對象。
        Model和View使用Observer模式進行溝通;而Presenter和View則使用Mediator模式進行通信;Presenter操作Model則使用Command模式來進行。基本設計和MVC相同:Model存儲數據,View表示Model的表現,Presenter協調兩者之間的通信。在 MVP 中 View 接收到事件,然后會將它們傳遞到 Presenter, 如何具體處理這些事件,將由 Presenter 來完成。

    圖1:Model-View-Controller

     

     

    圖2:Model-View-Presenter
    處理流程方面,在MVC中,用戶的請求首先會到達Controller,有Controller從Model獲取數據,選擇合適的View,把處理結果呈現到View上;在MVP中,用戶的請求首先會到達View,View傳遞請求到特定的Presenter,Presenter從Model獲取數據后,再把處理結果通過接口傳遞到View。
    使用MVP后,我們可以提高對Model和Presenter的復用,比如可以對Model和Presenter不做修改,而能提供ASP.NET Web Form和 Windows Form。
    在ASP.NET MVC Framework中,采用行內代碼進行數據呈現,邏輯集中在Controller中,但是View無法完全交給UI設計人員完成。在MVP模式中,所有的業務邏輯交給Presenter去處理,這樣View中代碼就變得及其簡潔,將可以輕易的把開發人員和UI設計人員分開,如下圖所示:

     

     

    MVP實例講解
      
    下面看一個簡單的例子:
      該方式將創建Presenter,傳遞View和model,調用“InitView”方法的功能交給ASCX用戶控件(View)處理。View應用相應的Presenter,Presenter只知道View的接口。ASPX頁只用于添加用戶控件,因此只需要將用戶控件拖拽到頁面上可以很容易的重用。

    public class Presenter
    {
        public Presenter(IView view, IModel model)
         {        
            this.view = view;
            this.model = model;
        }

        public void InitView(bool isPostBack)
         {
            if(!isPostBack)
             {
                view.SetProducts(model.GetProducts());
            }
        }
        
        public void SaveProducts(IList<IProduct> products)
         {
            model.SaveProducts(products);
        }
    }

    //頁面或用戶控件CS代碼
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        presenter = new Presenter(this,model);
        presenter.InitView(Page.IsPostBack);
    }

    public void SetProducts(IList<IProduct> products)
    {
        //bind products to view
    }

    //視圖接口
    public interface IView
    {
        void SetProducts(IList<IProduct> products);
    }

    通過上面的代碼就可以了解到MVP的結構是什么樣的,可根據這種模式來開發你的項目。當然你也可以從codeplex網站上下載一個Demo,進一步理解。希望這篇文章能對大家有用。

    企業級MVP架構的應用
      
    在企業級ASP.NET應用中使用MVP 
    1、使用用戶控件封裝Views:這個主題討論用戶控件作為MVP中的View。
    2、MVP的事件處理:這個主題討論連同頁面驗證傳遞事件到Presenter,IsPostBack和將消息傳遞到View。
    3、MVP和PageMethods的頁面重定向:這個主題討論使用用戶控件作為View,如何使用PageMethods處理頁面重定向。
    4、MVP的Presentation安全控制:這個主題討論如何根據基本的安全限制顯示/掩藏View中的區段。
    5、使用MVP的應用的架構(高級):這是個重點,這個主題展示一個使用Nhibernate作為數據訪問層的MVP應用。

     Codeplex網站上的那個例子,含概的內容不少,大家可以下載下來分析。

    MVP工作感言
     
       這次寫這篇文章,主要是解讀MVP框架,針對微軟MVP的一個例子講解所涉及到的一些應用模式。最近公司項目采用了MVP架構來開發,對我來說有頗多收獲和感慨。對于MVP模式來開發,應當算是新的架構,因為之前只知道微軟MVP(Microsoft Most Valuable Professional),并不知道MVP(Model-View-Presenter)。自從來到博客園里不斷學習,不斷借鑒,豐富了自己的知識。在此要感謝drummeryξ簫音ξ兩位老師的文章,同時也借鑒了UML軟件工程組織網站的文章。MVP模式開發項目,我想未來幾年將會越來越被許多人使用開發項目。在這里的MVP,我想同樣應該實用于開發Windows軟件項目。這篇文章寫的比較倉促,難免有誤之處,同時我也在不斷的挖掘MVP的更深層次的應用。在這里這是我個人的理解,希望高人點評指點,若您有其他的理解,可以與我共同探討。希望大家一起學習,共同進步。



    分享到:
    上一篇:如何在Windows 8上安裝配置IIS8.0的環境
    下一篇:我自己的PHP學習筆記:學習知識要點集錦
     

    本站業務:聊城網站建設-聊城網站制作-聊城做網站  
    皇家社会vs莱万特 百人牛牛如何赢#### 看牌牛牛外挂 最新欢乐生肖娱乐 拉齐奥 反倍投倍投20期计划 重庆时时开奖 靠谱的棋牌赢钱游戏 网上买足彩用什么软件 1000本金十期倍投方案 bet007足球即时比分l 拉基蒂奇 分分彩组选包胆怎么玩