Android MVVM探究(一)

简介

随着技术的不断发展,各种开发架构也应运而生,例如MVCMVPMVVMMVI等,当然这些架构也不局限于移动客户端的开发,其实很多架构理念都是由前端提出并演化应用的(没办法呀现在前端太卷了),例如vue就是采用的MVVM的架构。这么多架构的存在当然也是为了使得项目结构清晰,解耦模块之间的耦合度。当然本文主要介绍的还是android中对于这些架构的应用对比,重点是介绍MVVM在android中的基础使用。

对比

MVC

Android flow 网络请求_图层

M(模型层):一般用于提供数据,例如网络访问获取、数据库获取等(这里的M模型层不只是某个获取数据的方法或者类,而是对数据请求的封装模块)。可与V层直接进行交互。

V(视图层):主要是展示数据与接收用户交互,一般是由xml文件构成。

C(控制层):主要是有Activity或者Fragment构成,主要负责响应用户与界面的交互,和请求获取数据,返回给V层进行展示。

优点:前后端代码分离

缺点:视图层和模型层之间存在耦合;数据请求的发起以及用户的交互逻辑都在控制层,这会导致单个Activity存在大量的业务逻辑和交互逻辑会显得过于臃肿不利于项目的后期维护

MVP

Android flow 网络请求_图层_02

M (模型层):一般用于提供数据,例如网络访问获取、数据库获取等(这里的M模型层不只是某个获取数据的方法或者类,而是对数据请求的封装模块)。可与视图层直接进行交互。

V(视图层):主要是展示数据与接收用户交互,这里的视图层可以是xml和它的控制器ActivityFragment,或者是WebView来作为视图层

P(逻辑控制层):作为M层与V层的桥梁,会持有M层和V层的对象,它从M层获取数据并通过接口回调的方式通知V层刷新数据

优点:M层与V层不存在耦合增加了模块间内聚使得架构清晰

缺点:P层与M层、V层间的交互通过接口回调的方式,在定义一个业务界面时会增加大量的接口增加代码量;同时P层会持有V层和M层的对象如果处理不当会有内存泄漏的风险

MVVM

Android flow 网络请求_获取数据_03

M(模型层):一般用于提供数据,例如网络访问获取、数据库获取等(这里的M模型层不只是某个获取数据的方法或者类,而是对数据请求的封装模块)。可与视图层直接进行交互。

V(视图层):主要是展示数据与接收用户交互,这里的视图层可以是xml和它的控制器ActivityFragment,或者是WebView来作为视图层

VM(逻辑控制层):作为M层与V层的桥梁,实现 ViewModel 的双向绑定,不在持有V层的对象,通过观察者模式控制V层刷新数据,同时将V层中的业务代码进行分离,以及将V层所要展示的数据进行分离,

优点:进一步解耦了视图层与控制层;是的业务逻辑更加清晰

缺点:因为控制层不在存有视图层对象,他们之间的需要通过观察者模式进行交互,使页面异常追踪变得 不方便,

也于不利于代码重用

MVI

待补充