近年来,谷歌的运用结构不断推陈出新,从MVC,MVP,MVVM,到如今官方引荐运用的MVI架构。作为开发者时间重视着技术的更新迭代,毕竟仍是要靠技术吃饭。今日抱着学习的情绪,咱们一起了解一下Android架构的演进史以及MVI到底有什么优势值得让谷歌官方引荐运用。篇幅较长,请耐性阅览。
MVC
MVC架构是最早接触的Android架构,首要有三部分组成:View ,Model 层,Control 层。
- View层首要担任UI界面的展现。
- Model层担任供给界面展现所需求的数据。
- Control 操控层用来衔接View层与Model层,处理事务逻辑。
咱们来看一下三者之间的联系,如下图:
在MVC架构中,Activity既充任View层又充任Control层,不只担任UI界面的渲染还担任处理复杂的交互逻辑,导致Activity中代码非常臃肿巨大,耦合性高,维护起来非常困难。
MVP
MVP的呈现很好的处理了MVC的一些难点,经过代码分层将Activity中的各项功能隔离开来,以接口回调的形式进行数据通信。
在MVP中,Persenter层担任处理复杂的事务逻辑,一起处理Model层传递过来的数据。Model层与Activity之间只能经过Persenter层进行通信,降低了Model层与Activity的代码耦合性。确保了Activity的单一责任准则。可是Persenter层持有Activity中view的引用,处理不当容易发生内存泄漏。另外跟着事务的增多,需求更多的接口进行数据的回调。
MVVM
MVVM是现在运用最普遍的架构。
- Model层担任供给页面展现需求的数据。
- View层担任展现页面。
- ViewModel层担任处理数据。
经过运用Databinding将View层ViewModel之间进行数据双向绑定。View层经过调查ViewModel层的数据改变而自动进行UI改写。而且ViewModel还可以经过Lifecycle自行办理生命周期,及时开释资源,避免发生内存泄漏。
假如只看联系图的话,MVVM与MVP没有什么区别,但实现原理上却不同,MVP经过接口回调的形式,被迫的接收Persenter层传递过来的数据。MVVM是以调查者的身份,经过调查数据的改变自动改写UI。
简略介绍完前面三种架构,那么MVI到底是什么,为什么能让谷歌官方如此引荐?下面咱们经过代码一起来看一下。
MVI首要是借用了前端的思维,经过数据的单向活动将页面状况和事情别离,首要分红以下几个部分:
- Model :这儿的Model是指页面的状况,如页面加载状况,View控件的显现状况等。而不是MVVM的Model。
- View : 能够接收Model层的UI status改变,一起也能经过Intent事情对页面进行显现改变
- Intent : 将用户的操作事情包装成Intent事情,交给Model层进行数据处理。而不是activity中的Intent。
各模块之间的联系如下图:
下面咱们经过实例代码来简要阐明:
- 界说网络的三种状况,doSuccess 成功,doFailure 失利,doLoading 加载中。
- 新建一个ViewModel类。
初始状况为NetResource.doLoading 加载状况,当网络回来成功或失利时,将状况回调告诉给View层,View层需求对状况进行监听。
- View层监听网络数据状况。
依据调查到的不同网络回来状况,进行数据处理或页面展现。
- 最终咱们经过用户的操作,界说了三种目的事情。
- 用户经过自动触发不同的目的事情,进行不同的网络数据恳求。
- 咱们将用户的操作目的封装成NetWorkEvent事情,依据不同的操作进行相对应的事情处理,最终将数据经过同一个Status状况进行处理。
对比MVVM,MVI的数据是单向活动的,从目的到数据恳求,最终反馈给页面处理。页面接收用户的目的事情而发生不同的数据恳求。经过运用同一个状况处理不同的目的事情。形成了一个闭环的事情操作。只需求在View层监听一次,就能够处理不同的目的事情了。
信任看到这儿,你对在Android 中假如运用MVI有了一定了解,然而MVI并不一定便是最好的挑选,依据详细事务挑选适宜的架构才干有效的进步工作效率。