最近接手一个二手项目,原来使用网络流传的MVP架构可把我累得够呛。写一个activity要建接口和P 3至4个java文件的麻烦不说,就P的复用需要实现接口和baseView(相当于不能复用)很让我怀疑可能接手了一个假MVP 。φ(>ω<*) 好啦,下面开始进入正题:
在你也怀疑MVP的时候,在你也想了解Google Android AAC架构组件而担心没有足够时间去学习(建议学习,只需学习viewModle和liveData你就可以嫌弃本文喽),本文正适合你。
一、思想
起源于使用EventBus过程中,诞生于实践和经验和偶然。因为EventBus在其中不可剥离,我又称其为EventBus核心事件驱动之MVVM模式。无论MVP/MVVM架构其目的都是把View和逻辑分离,我这里核心思想是利用EventBus事件联系View和逻辑(ViewModle)。
二、架构图
- View :即Activity、Fragment、Layout xml等,持有ViewModle对象。
- ViewModle:逻辑和运算,提供接口给View获取要展示的数据;
- Modle:数据对象啦,规范的数据面向对象的编程必不可缺;
- RESOP:数据来源提供者。这一层我现在未用代码散放在ViewModle中,参考AAC需要的业务位置,建议独立抽出
- db:画图时画这样了懒得改。代表一切本地数据:数据库,文件,SharedPreferences…
- Net:远端数据。
三、运行流程
以天气预报为例:
- View注册EventBus接收者;
- View使用持有的viewModel对象告知ViewModle去获取天气信息;
- ViewModle通过RSOP得到天气信息,将数据封装成Modle;
- ViewModle发送EventBus事件告知View获取天气信息结果;
- View收到事件,通过持有的viewModle对象获取实际信息展示在View上。
四、总结
成功分离View与逻辑,比MVP更简单更自由,ViewModle容易复用。
不足,现项目中的ViewModle是View创建时创建持有,不能实现多View共享内存中的ViewModle,可根据实况考虑使用单列或其它更好方式实现多view共享数据。EventBus事件驱动要求对事件规范化,建议事件不包含数据对象,获取数据对象由ViewModle提供geter();
Demo下载 For GitHub
注:如有纰漏请指正。如有疑问欢迎留言探讨