文章目录
- 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
代码下载