最近看到了几篇与 Jetpack MVVM 有关到文章,使我不禁也想淌一下这场混水。我是在 2017 年下半年接触的 Jetpack 的那套开发工具,并且后来一直将其作为开发的主要框架。在这段时间的使用过程中,我踩过一些坑,也积累了一些经验,为了将其推广到其它到项目中又专门封装出了一个库。当然,Jetpack 所提供的组件已经比较完善,我的工作只能算是锦上添花。下面我就介绍下,现在我是如何在项目中使用 Jetpack MVVM 的。
1、后起之秀和黯然失色的 MVPMVP 非常强大,也是或者曾经是很多大公司首选的开发框架。但是相比于如今的 MVVM,曾经的 MVP 模式在使用起来存在诸多的不便,难免显得黯然失色。
首当其冲的是,在使用 MVP 编写客户端代码的时候你要写大量的接口和类。一般的 MVP 模式中,我们需要先通过接口定义 Model、View 和 Presenter 要实现的方法;然后,需要再编写三个类来实现以上三个接口的逻辑。就是说,一般的,为了实现一个界面的逻辑,你需要编写至少六个类文件。
其次,Presenter 比较臃肿。Presenter 负责 View 和 Model 层之间的交互,请求的结果及其与 View 层的交互逻辑都在 Presenter 中完成。很多框架中,为了解决 View 和 Model 层之间的强引用关系,在 Presenter 定义 Handler 来通过消息的方式传递信息。这就使得代码的过于模版化,增加了很多与具体业务逻辑无关的代码。此外,如果使用 Handler 作为消息传递的桥梁,因为通过更新 UI 又发生在主线程里面,就可能会导致主线程消息堆积过多。
那 MVVM 是如何做的呢?下面的这张图大致地诠释了 Jetpack MVVM。实际上,Jetpack 所提供的 MVVM 核心的功能只有 ViewModel 和 LiveData 两个。ViewModel 主要用来通过 Model 请求数据信息,然后通过 LiveData 作为信息交互的桥梁,将信息传递给 View 层。从类的数量的角度上来看,使用 MVVM 实现一个页面,你只需要写三个类文件。