天天看點

Android MVP架構MVCMVP

文章目錄

  • MVC
    • MVC事件流向圖
    • MVC(Model-View-Controller)關系
    • MVC執行流程
    • MVC缺點
  • MVP
    • MVP事件流向圖
    • MVP(Model-View-Presenter)關系
    • MVP執行流程
    • MVP優點
    • MVP基本實作
    • MVP+RxJava+Retrofit

MVC

MVC事件流向圖

Android MVP架構MVCMVP

MVC(Model-View-Controller)關系

類型 說明
Model 模型層 負責資料處理,如網絡請求,資料庫處理,IO操作等
View 視圖層 負責界面展示,對應XML布局和View等視圖代碼
Controller 控制層 負責邏輯控制,通常有Activity/Fragment承擔

MVC執行流程

在MVC架構中,View需要持有Controller,Controller需要持有Model,Model需要持有View。

View擷取到使用者操作,通知給Controller,Controller進行業務邏輯處理,通知給Model進行資料處理,Model更新資料通過Controller通知View重新整理界面。

MVC缺點

  • 在Android中,Activity/Fragment承擔View和Controller兩個角色,導緻Activity/Fragment代碼較為臃腫
  • Model和View沒有解耦,導緻後期維護困難
  • 增加代碼結構的複雜性

MVP

MVP事件流向圖

Android MVP架構MVCMVP

MVP(Model-View-Presenter)關系

類型 說明
Model 模型層 負責資料h擷取和處理
View 視圖層 負責界面展示
Presenter 通知層 連接配接Model和View的橋梁,負責邏輯控制

MVP執行流程

在MVP架構中,View和Model不能直接互動,而是使用Presenter作為View和Model之間的橋梁,其中Presenter同時持有View和Model,View持有Presenter。

View擷取到使用者操作,通知給Presenter,Presenter進行業務邏輯處理,通知Model進行資料更新,Model更新資料後将資料傳給Presenter,Presenter再通知View重新整理界面。

MVP優點

  • 讓Model與View的徹底耦合
  • 代碼結構清晰,極大簡化了Activity/Fragment

MVP基本實作

└── mvp_sample
    ├── MainActivity.java
    ├── base
    │   ├── BaseActivity.java
    │   ├── BaseApplication.java
    │   ├── BaseFragment.java
    │   ├── BaseMvpActivity.java
    │   ├── BaseMvpFragment.java
    │   ├── BasePresenter.java
    │   └── interfaces
    │       ├── IPresenter.java
    │       └── IView.java
    ├── mvc
    │   └── ArticlesActivity.java
    ├── mvp_activity
    │   ├── ArticlesContract.java
    │   ├── ArticlesModel.java
    │   ├── ArticlesMvpActivity.java
    │   └── ArticlesPresenter.java
    └── mvp_fragment
        ├── ArticlesContract.java
        ├── ArticlesFragment.java
        ├── ArticlesModel.java
        ├── ArticlesPresenter.java
        └── FragmentWithActivity.java
           

代碼下載下傳

MVP+RxJava+Retrofit

├── base
│   ├── BaseActivity.java
│   ├── BaseApplication.java
│   ├── BaseMvpActivity.java
│   ├── BaseObserver.java
│   ├── BasePresenter.java
│   ├── BaseResponse.java
│   └── interfaces
│       ├── IPresenter.java
│       └── IView.java
├── bean
│   └── ArticlesBean.java
├── http
│   ├── ApiException.java
│   ├── ExceptionHandler.java
│   └── HttpManager.java
└── mvp
    ├── ApiService.java
    ├── ArticlesActivity.java
    ├── ArticlesContract.java
    └── ArticlesPresenter.java
           

代碼下載下傳