EventBus之快速搭建简单MVVM架构模式

最近接手一个二手项目,原来使用网络流传的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)。

二、架构图

EventBus之快速搭建简单MVVM架构模式_第1张图片

  1. View :即Activity、Fragment、Layout xml等,持有ViewModle对象。
  2. ViewModle:逻辑和运算,提供接口给View获取要展示的数据;
  3. Modle:数据对象啦,规范的数据面向对象的编程必不可缺;
  4. RESOP:数据来源提供者。这一层我现在未用代码散放在ViewModle中,参考AAC需要的业务位置,建议独立抽出
  5. db:画图时画这样了懒得改。代表一切本地数据:数据库,文件,SharedPreferences…
  6. Net:远端数据。

三、运行流程

以天气预报为例:

  1. View注册EventBus接收者;
  2. View使用持有的viewModel对象告知ViewModle去获取天气信息;
  3. ViewModle通过RSOP得到天气信息,将数据封装成Modle;
  4. ViewModle发送EventBus事件告知View获取天气信息结果;
  5. View收到事件,通过持有的viewModle对象获取实际信息展示在View上。

四、总结

成功分离View与逻辑,比MVP更简单更自由,ViewModle容易复用。
不足,现项目中的ViewModle是View创建时创建持有,不能实现多View共享内存中的ViewModle,可根据实况考虑使用单列或其它更好方式实现多view共享数据。EventBus事件驱动要求对事件规范化,建议事件不包含数据对象,获取数据对象由ViewModle提供geter();


Demo下载 For GitHub
注:如有纰漏请指正。如有疑问欢迎留言探讨

你可能感兴趣的:(Android,架构)