1. 程式人生 > >android原始碼設計模式——框構模式MVC、MVP、MVVM

android原始碼設計模式——框構模式MVC、MVP、MVVM

一、框架模式、設計模式、架構模式的概念理解        通常來講框架面向於一系列相同行為程式碼的重用,而設計則面向的是一系列相同結構程式碼的重用,通常所說的架構則介於框架與設計之間 二、MVC、MVP、MVVM三種設計模式        2.1、MVC模式,常見的應用模式,這裡先忽略            2.2、MVP模式,全稱: Model View Presenter:        MVP模式的三個角色:        Presenter: View和Model的橋樑,從Model層檢索資料後,返回給View層,使得View和Model之間沒有耦合,也將業務邏輯從View角色上抽離出來        View: 使用者介面,View通常指Activity、Fragment或某個View控制元件,它含有一個Presenter成員變數。通常View需要實現一個邏輯介面,將View上的操作通過介面轉給Presener實現,最後Presenter呼叫View邏輯介面將結果返回給View元素        Model:資料的存取,Model封裝了資料庫DAO或者網路獲取資料的角色,或者兩種資料獲取方式的集合        

       對比: MVP與MVC的主要區別是,MVP中的View不能直接訪問Model,需要通過Presenter發出請求,View與Model不直接通訊.        MVP框架設計原始碼: https://github.com/hehonghui/the-tech-frontier-app        總結: Model——View——Presenter 三者之間的關係都是鬆耦合,Presenter持有的View、Model引用都是抽象,當UI發生變化,只需要替換View即可。而資料引擎需要替換時只需要重新構建一個實現ArticleModel介面的類實現相關存取邏輯即可。這樣使得View、Model、Presenter三者之間獨立變化,測試也方便,可擴充套件性、靈活性都很高。      
       2.3、MVVM特點:MVVM和MVP非常相似,唯一區別是View和Model進行雙向繫結(data-binding),兩者之間有一方發生變化則會反映到另一方上,而MVP與MVVM的主要區別是,MVP中的View更新需要通過Presenter,而MVVM則不要,因為View與Model進行了雙向繫結,資料的修改會直接反應到View角色上,而View得修改也會導致資料得變更。此時,ViewModel角色需要做的只是業務邏輯的處理,以及修改View或者Model的狀態。MVVM模式有點像ListView與Adapter、資料集的關係,這個Adapter就是ViewModel角色,它與View進行了繫結,又與資料集進行了繫結,當資料集合發生變化,呼叫adapter的notifyDataSetChanged之後View就直接更新,他們之間沒有直接的耦合,使得ListView變得更為靈活

三、MVP中Prester對View引用生命週期問題,通過建立BasePrenter持有對View的弱引用,在Activity生命週期做presenter的引用清除可解決問題,具體可參考網上程式碼