我的MVP架构的学习之旅
- 阅读本文大概需要4min
关键字
Architecture、MVP 、The Clean Code
前言
本文是本人对于Android MVP的架构的学习过程以及思考,没有具体的代码例子,不过我相信你看了肯定会有收获的。
思考
AndroidMVP的设计架构从接触到现在已经快有两年了,这些年一直与自己的糟糕的代码打交道,
从不规范的MVC——把大多数业务逻辑和界面展示写在Fragement/Activity里
到不规范的MVP——把数据与逻辑处理(M与P),以及逻辑处理与界面(P与V)代码区分的不清晰。
关于学习MVP的教程,百度Google一搜一大把,但是很多都是互相摘抄甚至是误导性错误理解。以下我将从MVP的介绍,MVP资料学习,MVP的思考三个方面进行总结,讲的不好欢迎交流想法、拍砖。
MVP介绍
M-V-P,分别是Model(数据管理层,包括远程服务器与本地缓存以及本地数据库等),Presenter(业务处理层,View与Model交互中介的身份,负责根据View中用户的交互来控制Model对数据的处理,然后展示到View中去),View(视图的展示层,只有有关界面操作的方法,不直接和Model交互)
典型的架构图
还有最早 uncle bob在这里提出的
The Clean Architecture
图片2来自Google Sample
两者的差别,从图片上可以很直观的看到图片2在图片1的基础上多加了Domain Layer,在这一层主要职责就是对数据进行增删改查的一些操作,在这里很方便写测试用例,可以说图2是图1的升级版了。
MVP资料学习
-
最直接的资料当然是Google官方提供的Demo了, android-architecture里面包含了基本的MVP架构,The Clean MVP 以及搭配流行框架RxJva 和Dragger2的各种版本,还有MVVM设计架构以及与MVP一样搭配流行框架的不同版本。最初的概念入门可以参考demo,避免走入误区。
-
要想在项目中更真实的去接触,同时手上又没有可以入手的项目,学习别人的Sample是最好的方式。关于MVP架构的学习,比较流行的都会搭配一些流行框架,这样就免不了要学习Dragger 、RxJva、RxBus(也可以用RxJava实现)等一些流行框架的学习,你可以先简单了解一些这些开源库,然后在学习Demo遇到问题有针对性的学习,关于Sample的选择,我有几个亲测还不错的。
-
https://github.com/esoxjem/MovieGuide 这个Demo很简单,只有 列表展示和详情显示,代码采用The Clean MVP,包含Dragger2、RxJava,对于基本了解了Dragger2 和RxJva可以先参照这个例子
Tips:例子的运行需要去这个地址去注册,然后申请API_KEY,最后按照README简单配置就可以了。 -
https://github.com/Rukey7/MvpApp这是一个比较完整的项目,代码量比较大,包含新闻,图片,视频。包含了Dragger2、RxJava,生命周期管理rxlifecycle,Tinker热修复,视频播放ijkPlayer,内存泄漏检查leakcanary等一些开源库,该Sample适合想把开源库结合到具体项目很有帮助
-
https://github.com/JessYanCoding/MVPArms一个你可以直接引入自己具体项目的MVP框架,作者对该框架进行了比较友好的封装,包括代码模板的快捷键,Token等一些公共变量,调试信息输出及错误的捕获,可以满足中小型项目的开发。这个框架的代码量也不少,设计上也不简单,需要花点时间学习。
-
MVP的思考
有关思考,我总结了两点
- 保证V不存在数据的全局变量
- 点击事件的处理放在P里,不要放在Adapter或者Fragment的V里面