Hement:MVP架構設計(一)

  • Hement : 取英文前字母,意思爲快樂享受,但願咱們在敲代碼的工程中是快樂享受的意思

image.png

  • 16年的時候我寫過一篇博客基於Retorfit+Rxjava+Rxandroid的網絡架構MVP網絡框架(Retorfit+Rxjava+Rxandroid),使用的是Rxjava1.0,其中的Model 層搭建過於簡單,加劇了Presenter的任務,同時也沒有很好的解耦,沒有使用Dagger2依賴注入框架,Presenter的生命週期沒有和Acivity綁定等等問題。故有此文章

一、什麼是MVP架構?

  • Model-view-presenter,簡稱MVP,是計算機軟件設計工程中一種對針對MVC模式,再審議後所延伸提出的一種軟件設計模式。java

    • MVC模式(Model–view–controller)是軟件工程中的一種軟件架構模式,把軟件系統分爲三個基本部分:模型(Model)、視圖(View)和控制器(Controller)。
    • MVC模式最先由Trygve Reenskaug在1978年提出,是施樂帕羅奧多研究中心在20世紀80年代爲程序語言Smalltalk發明的一種軟件架構。MVC模式的目的是實現一種動態的程序設計,使後續對程序的修改和擴展簡化,而且使程序某一部分的重複利用成爲可能。除此以外,此模式經過對複雜度的簡化,使程序結構更加直觀。軟件系統經過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員能夠經過自身的專長分組:
      • 控制器(Controller)- 負責轉發請求,對請求進行處理。
      • 視圖(View) - 界面設計人員進行圖形界面設計。
      • 模型(Model) - 程序員編寫程序應有的功能(實現算法等等)、數據庫專家進行數據管理和數據庫設計(能夠實現具體的功能)。
  • Model-view-presenter (MVP) 是用戶界面設計模式的一種,被廣範用於便捷自動化單元測試和在呈現邏輯中改良分離關注點(separation of concerns)。android

    • Model 定義用戶界面所須要被顯示的數據模型,一個模型包含着相關的業務邏輯。
    • View 視圖爲呈現用戶界面的終端,用以表現來自 Model 的數據,和用戶命令路由再通過 Presenter 對事件處理後的數據。
    • Presenter 包含着組件的事件處理,負責檢索 Model 獲取數據,和將獲取的數據通過格式轉換與 View 進行溝通。

MVP模式.jpg

二、Hement中的MVP架構

  • View(UI層):這是ActivitiesFragments和其餘標準Android components組件所在的地方。它負責向用戶顯示從演示者接收的數據。它還處理用戶交互和輸入(點擊事件等),並在須要時觸發Presenter中的正確操做。git

  • Presenter:presenters訂閱「DataManager」提供的RxJava可觀察對象。他們負責處理訂閱生命週期,分析/修改「DataManager」返回的數據,並調用視圖中的適當方法來顯示數據。程序員

  • Model (Data Layer):它負責檢索、保存、緩存和消息數據。它能夠與本地數據庫和其餘數據存儲以及restful APIs或第三方SDK通訊。它分爲兩部分:helpers 和一個DataManagerhelpers 的數量因項目而異,每一個helper都具備很是特定的功能,例如,與API對話或在「SharedPreferences」中保存數據。DataManager使用RxJava操做符組合並轉換來自不一樣helper 的輸出,所以它能夠:1)向演示者提供有意義的數據;2)老是一塊兒發生的組動做。該層還包含定義數據結構如何的實際模型類。github

Android中的MVP模式.jpg

  • 從右到左看圖表:算法

    • Helpers(Model):一組類,每一個類都有很是特定的責任。它們的功能能夠從與API或數據庫對話到實現一些特定的業務邏輯。每一個項目都有不一樣的Helper,但最多見的是:
    • DataBaseHelper:它處理從本地SQLite數據庫中插入、更新和檢索數據。它的方法返回發出普通Java對象的Rx Observables可觀測值。
    • PreferencesHelper:它優先保存和獲取來自SharedPreferences的數據,它能夠直接返回Observables或純Java對象。
    • Retrofit services:RetrofitRestful APIs進行通訊的接口,每一個不一樣的API都有本身的Retrofit服務。它們返回Rx Observables
    • Data Manager (Model):它是體系結構的一個關鍵部分。它保留對每一個Helpers類的引用,並使用它們來知足來自presenters的請求。
    • Presenters:訂閱DataManager提供的可觀察對象,並處理數據,以便在視圖中調用正確的方法。
    • Activities,Fragments,ViewGroups(View):實現演示者能夠調用的一組方法的標準Android組件。它們還處理用戶交互,例如單擊並相應地經過調用Presenter中的適當方法進行操做。這些組件還實現與框架相關的任務,好比管理Android生命週期、填充視圖等。
    • Event Bus:它容許向視圖組件通知模型中發生的某些類型的事件。一般,‘DataManager’發佈事件,而後這些事件能夠被活動和片斷訂閱。事件總線用於與僅一個屏幕無關而且具備廣播性質的很是特定的操做例如,用戶已經退出登陸.
  • 未完待續。。。。。數據庫

  • GitHub地址:Hement,持續更新中設計模式

  • 最後說明幾點緩存

    • tks wiki MVC
    • 我寫文章不多說本身的觀點,這是第一次代表本身的觀點,項目自己不大的狀況,也沒有達到某種量級的時候,不要使用組件化和插件化,構建時間和找問題的時間太多了,反而浪費開發的時間,自我感受,組件化就是大廠玩的東西,我不是說很差,而是對於咱們大多數的公司,是徹底用不上組件化的,及時用的上,搞明白輪子的緣由都要花費好多的時間和經歷,可是本身的項目必定要清晰,至少本身使用起來不那麼的討厭!
    • Event Bus 可是這個事件總線有必定侷限性,若是這個不存在生命週期的話,是不可以接受到的這個事件。例如:你不能發一個事件,讓某個沒有打開的View調動通知欄。
    • tks Model-view-presenter
    • android-boilerplate
相關文章
相關標籤/搜索