说到MVP,Android 开发者肯定会参考Google 的基础实现:android-architecture;大体的框架如下:
mvp.png当然大家也应该关注正在成熟的:android-architecture-components,还是对开发有较大的变更。
其实这么久来Android 开发中就没有什么很官方的框架,我觉得大家可以根据自己App 的业务情况和团队情况,参考android-architecture(暂时并没有加入android-architecture-components)然后再封装定制属于自己的框架;虽然业务可能千变万化,但是基本的一个App 的框架可以由mvp+db+http+Base 抽象+rxjava(处理异步等真的方便)实现自己的代码结构、整体架构、可测试性、可维护性的项目。
本文主要是记录自己参考todo‑mvp‑rxjava 结合Rxjava2 抽象BaseAct,BasePresenter,BaseView 等实现的简单项目框架的过程。(写作记录让人再次思考反省)
项目框架简介(Demo:Android-MVP-Rxjava2)
- mvp 使用mvp 相对传统的mvc(并不想讲mvvm)带来的蜜糖不是甜的一点点,特别是复杂的项目。
- rxjava2 改良后的rxjava2 更符合 io32783 Stream 的操作,处理异步的链式操作看起来就会很流畅,把操作数据库和密集度计算的操作调度到对应的线程然后结果呈现切回主线程会让程序流畅很多。
google 的todo-mvp 使用的是rxjava1,我不想回去 - 封装抽象Base 这几乎就是大学课本一直在学的东西,加上一些泛型的知识
- 可测性 暂时还没有,经常开发的时候API 没有准备好的情况不要太多,你还在依赖测试小妹的人工黑测?
- dagger.android 有了这个使用dagger 的时候方便快捷简单多了,依赖注入使用变得很简单,代码量也很少
代码的自动生成
大家也发现了,使用MVP 抽象封装后虽然有那么多的好处,但是代码的量增加了不少,而且习惯MVC后入门有点难,刚开始写起来有点吃力;我们也从来不干重复性的劳动,使用插件进行代码自动生成吧。
根据自己封装的MVP模式,比如你要做等录,输入Login,会自动生成login文件夹和LoginActivity,LoginPresenter,LoginModel等,并且这些类的范型,继承关系接口实现都按照规则自动生成了代码。
最后github demo 地址,仅供交流
mvp.png这个项目简单的演示了MVP得封装使用,主要是抽象出基类,结合rxjava2。
包含基类的presenter,model,view ,甚至某个功能你觉得一点没有必要mvp 你可以直接继承BaseAcvtivity,否则继承BaseMVPActivity.
登陆功能比较简单,model 层的数据都是来源于网络;
在文件夹mvp_more 演示的功能下稍微复杂一点,model 层有local(db)+remote(http).其中读取db 流程用rxjava2 包装了一下,不是在主线程完成的,不然如果查询数据库比较耗时UI会明显卡一下,在读取数据的代码打一个断点你会发现调试到断点处不进行下一步UI依然可以随意操作,如果是主线程肯定不行。
为什么一定要引入Rxjava(2)
-
当业务逻辑复杂繁琐的时候依然能保持代码的简洁性
-
http 的请求和处理使用Retrofit 线程调度等和R x j a v a 有天然的易结合
-
某些需要异步处理的业务
后台计算不能影响UI 操作的流畅,比如上班打卡中计算能否打卡可能很复杂,需要间隔计算但是不能影响查看打卡列表,异步操作就非常方便 -
Rxjava2 的过滤,变换,组合等操作符集
比如像JD 等购物网站对结果根据价格颜色等进行筛选可以非常的方便操作
网友评论