天天看点

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
           

代码下载