文章目錄
- MVC
-
- MVC事件流向圖
- MVC(Model-View-Controller)關系
- MVC執行流程
- MVC缺點
- MVP
-
- MVP事件流向圖
- MVP(Model-View-Presenter)關系
- MVP執行流程
- MVP優點
- MVP基本實作
- MVP+RxJava+Retrofit
MVC
MVC事件流向圖
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事件流向圖
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
代碼下載下傳