Android框架式编程之架构方案

目前移动端应用市场已经是百花齐放,很多独角兽公司都是通过App创业发展起来的,现在App类型更加丰富,功能越来越完善,基本上涵盖了各个行业的每个角落。为了开发出更加有竞争力的App,不仅需要功能上有创新,内容也需要更加多元化,这样就出现了相对巨大的工程。这些工程代码不停添加,如果没有一个好的架构,那么所有代码都会强耦合在一起,功能之间也会出现很多依赖,那么就会出现很多问题,例如:

1、修改功能困难,牵一发动全身。很多地方如果api写的不好,封装不优雅,那么就会出现改一个地方需要改很多地方的调用。
2、更新迭代工作中冗余废弃代码资源过多造成删除冗余变得很复杂,并且很可能出现很多bug。

为了解决上述的问题,经过长时间摸索和发展,当今已经有相当成熟的方案来保证尽量避免上述问题的出现。而架构就是为此而生的概念,架构在实际开发中又分为代码架构和项目架构。其中:

1、代码架构主要分为三类:MVC、MVP 和 MVVM。

2、项目架构主要分为:单工程模式、模块化、组件化、插件化。

单工程:此模式就不多说了,就是我们所有的代码都放置在主module下,不对代码进行按照功能模块进行多module的处理。

模块化:根据项目的特点,将一个项目的可以共享的部分抽离出来,形成一个独立的module,这就是模块化。模块化的内容不仅仅可以包含公共部分,一些相对独立的业务模块也是可以模块化的。

组件化:组件化是基于模块化的进一步演进,一个变种。组件化与模块化的不同在于,组件化的核心是模块角色的可转化性,在打包时是libiary,但是在调试的时候为Application。组件化的单位就是组件。(编译时)

插件化:插件化是将一个工程,按照业务划分为不同的插件,来化整为零,相互配合。插件化的单位是apk,可以实现apk的动态加载和动态更新,比组件化更加灵活。(运行时)

 

一、代码架构

1. 三大代码架构方案的区别比较:

MVC是一个广义的架构方法,将逻辑、数据、视图分离的代码架构,但是因为Android开发的特点,会导致C和V层在实际的代码中出现比较大的耦合。

MVP是一个广义的架构,适用于面向实体或者虚拟用户接口的开发,它是基于MVC的基础上,通过依赖倒置来解决Android开发过程中逻辑复用难、实现更替难的问题。

MVVM是一种页面开发的架构,基于数据驱动,通过只操作 ViewModel 中映射的视图数据 来刷新视图状态,以此来解决 视图调用的一致性问题,从而规避不可预期的错误。

总结:MVP 和 MVVM 二者之间没有任何关系。MVP 是对 MVC 的升级,而 MVVM 是现代化软件开发模式的范例。

2. JetPack MVVM 架构

在谷歌官方提供的MVVM架构中,提供了:Lifecycle、LiveData、ViewModel、DataBinding 组件。下面逐一介绍一下这些组件的作用:

  • Lifecycle 的存在解决了 生命周期管理 的一致性问题
  • LiveData 的存在,帮助 新手老手 都能不假思索地 遵循 通过唯一可信源分发状态 的标准化开发理念,从而在快速开发过程中 规避一系列 难以追溯、难以排查、不可预期 的问题。
  • ViewModel 的存在,主要是为了解决 状态管理 和 页面通信 的问题。
  • DataBinding 的存在,主要是为了解决 视图调用 的一致性问题。

二、项目架构

项目架构的核心思想:分层通信

1. 子模块的划分

除了常见的common部分抽离, 业务模块的划分尤为重要,相比于狭义上的架构,广义上的子系统的划分的关注点,很考验技术经验以及对业务的理解。

2. 通信方式

模块化的通信方式,无非是相互引入;抽取出来了common模块, 其他模块使用自然要引入这个module
组件化的通信方式,按理说可以划分为多种,主流的是隐式和路由。隐式的存在使解耦与灵活大大降低,因此路由是主流。
插件化的通信方式,不同插件本身就是不同的进程了。因此通信方式偏向于Binder机制类似的进程间通信。

推荐资料:

1. 是让人 提神醒脑 的 MVP、MVVM 关系精讲:https://juejin.im/post/6846687603547176974

2. 是让人耳目一新的 Jetpack MVVM 精讲:https://juejin.im/post/6844903976240939021

 

posted @ 2019-11-04 13:50  灰色飘零  阅读(966)  评论(0编辑  收藏  举报