一、前言
MVP 模式在几年前就已经出现了,只是那时属于新鲜玩意,很多项目都没来得及去运用,随着时间过去,这个模式已经被广泛运用,而我也是最近才正式在企业级 app 中使用这个模式。
二、什么是 MVP
MVP 可以认为是 MVC 的优化版,分别代表 Model、View、Presenter 三层
Model : 负责数据处理,如发送 http 请求进行数据存取等操作
View : 负责视图的展示、更新 如显示 loading、显示 List 等
Presenter:负责具体的业务逻辑处理
MVP 类结构:
Model 层与 View 层隔离,Presenter 作为代理分别于 View、Model 交互,View 层只与 presenter 交互
三、为什么要摒弃 MVC 而使用 MVP
先说 MVC(Model、View、Controller(控制层)),类结构如下:
可以看到 View 层是可以与 Model 直接交互的,同时 Controller 也能与 Model 直接交互,在安卓中 MVC 的各层其时并不能明确区分,如 Activity 它既能充当 View 层、又能担当 Controller 层,分工不明确,很容易
导致 Activity 中代码量剧增,且逻辑繁重,随着 App 业务日益复杂,MVC 模式的优化势在必行,而后 MVP、MVVM 架构也开始流行起来,并被认可
MVP 的优势:
1、层次分工明确,逻辑清晰
2、耦合度降低,便于维护、测试
3、便于多人协作开发
MVP 的缺点:
1、类文件会相对增加
2、Presenter 将会承受较大的职责,不设计好很很难复用
总体来说优点远大于缺点,缺点可以通过合理的 MVP 设计去减少
四、如何在安卓中使用 MVP 架构
MVP 模式并没有统一的实现标准,适合的才是最好的。下面我简单介绍下自己封装的 MVP 架构:
基础类结构:
项目大体结构:
1、在 Acitivity、Fragment 的基类中使用泛型去关联 Presenter,在基类 onCreate 方法中使用 MVPBinder 类中将 Model 与 View 注入 Presenter
2、为了减少类文件,BaseView 的接口定义在了对应的 Presenter 里面,Acitivity 去实现相应的 BaseView 接口
五、总结
MVP 用起来确实很有意思,设计的好坏很容易感受出来,方便我们不断地去优化,使逻辑变得清晰,结构清爽。 没有最好的标准,只有最适合自己的。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于