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的引用清除可解決問題,具體可參考網上代碼

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