1

在移动应用开发领域,应用架构作为支撑起整个应用的骨架,其重要性不言而喻
应用架构,本文首先聚焦于UI类应用架构,探讨其定义以及所带来的益处,这里不引用比较官方的定义,只说我们不使用架构有什么坏处。
在UI应用中,如果UI层面有很复杂的交互,业务层面有很繁杂的业务逻辑的话:

  • 没有架构的话站在业务角度来看,整个业务耦合性非常严重,往往牵一发而动全身,很难快速迭代响应需求从工程开发角度来看,整个工程一团乱麻,每个人的对功能的实现都不一样,最终导致真个工程难以维护,后人接手也很难理解整体业务
  • 对应自身而言,出现问题也很难排查从测试角度来看
  • 整个项目很难测试,测试用例无法编写,单元测试覆盖率难以保证

如果一个开发说自己的项目也没有特意使用什么架构,但同时代码也没有很强的耦合性,那就说明开发有比较好的code sense,不知不觉间已经在使用合适的架构来编码。

这里先说一下UI类应用的一个共性,请暂时先忘记Android的Activity,iOS的UIController这类常在架构文章中看到的概念,它们只是架构概念在对应平台的实现,而不是架构本身,我们需要在深刻理解应用架构之后才能在对应的平台框架下正确的实施架构。这里先把UI类应用的2大要素展示出来,UI和业务,这2大要素缺一不可,这里以如下一张图的UI为例,用户点击登录按钮,将用户名和密码提交到服务的校验,检验通过后跳转到二级页面,本地保存用户token;如果校验失败,Toast提示用户
Login
目前主流的架构包括MVC,MVP,MVVM,MVI,可以看出不论何种架构,其中M和V的角色是必定存在的,唯一的变数在居间协调的角色,即如何处理M和V的关系,这也是各种架构不断演进的目的所在。接下来,让我们详细剖析当前主流的几种架构模式。

MVC

MVC作为最经典的UI类应用的设计架构,有三个角色,M(Model), V(View),C(Controller)
MVC
在MVC架构中,视图层View中的行为-通常是用户点击事件,在上面的UI图里,用户点击登录按钮,View层发向Controller发起请求,然后Controller调用Model层发起登录请求,请求的结果通过回调给View层,在Android开发里,因为UI层采用了xml+Activity/Fragment的设计,Activity同时承担了View&Controller的角色,导致代码耦合性非常高。

MVP

MVP
在MVP架构中,事件发生后,View层向Presenter层发起请求,然后Presenter又通过Model层去执行业务逻辑,执行完成后将结果告知Presenter层,然后Presenter层将结果告知View层,View层线上最新的UI,在MVP架构中,将View和Model层解耦开来,增强了Model层的复用性

MVVM

在MVVM架构中引入了ViewModel的概念,顾名思义ViewModel=View+Model,但是既然存在了单独的Model模块,又怎么和View耦合呢,其实就是将Model的一部分通过试图绑定的形势直接映射到View层了,其实就是数据Bean类直接绑定在了View上,然后在借助一定的中间件将数据的变动也直接体现到View而已

MVI

MVI在传统架构的基础上引入了I—Intent和View Status的概念,将用户层的行为抽象成Intent给到中间件,由中间件调用Model执行业务逻辑,然后将业务状态映射成对应的Status,然后体现到View层。

Conclude

综上所述,其实所谓的架构就是在MVC的基础上,不断的在中间件层面做文章,MVC-MVP-MVVM-MVI以及其他不变的永远是M&V,其他一直变化的模块就是在不断的跳转Model和View的关系,以便让代码逻辑更加清晰,分层更加合理,代码更加易于测试。
再说一下一直以来的一个错误认知,在Android官方推出Jetpack组件后,很多人认为使用上来ViewModel就是MVVM架构,这个认识是不对的,其实Jetpack组件的作用更多体现在了中间件层面。ViewModel类只是官方提供的一个数据持久组件,使得数据在View因配置变更导致的重建中得以避免被销毁
LiveData-是官方提供的一个数据观察者模型。Model数据变动需要通知到View层时,相比于之前的回调,使用LiveData将页面的生命周期引入到UI刷新中,避免了性能浪费
DataBinding-组件确实是官方提供的是一个View和Model绑定的组件,使用了Databinding组件确实算是MVVM架构

理解了这些概念,就明白所谓的架构就是在中间件层做文章
关于架构,有说不完的话题,可以看看这篇文章https://github.com/android/nowinandroid/discussions/1273
综上所述,移动应用架构的选择和实施对于应用的成功至关重要。开发者应根据项目的具体需求选择合适的架构模式,并不断优化和完善。


philadelphia
17 声望4 粉丝

雪山千古冷,独照峨眉峰