Android 架构 - 概览

Android 架构 - 概览_第1张图片

一、概念

目的 解耦、复用、可读性、健壮性、提高并行开发效率。
架构划分原则 纵向划分模块、横向划分层级、解耦通信。

二、项目架构(模块划分)

参考文章:模块化组件化傻傻分不清?

1.1 单工程模式

通常我们写项目会进行分包处理,根据界面或功能的不同将代码文件存放在对应的包中。随着后期业务复杂增多,一个大型项目的代码量是及其庞大的,这会带来一系列的问题。

  • 可维护性下降:失去层次感降低可读性、可维护性。
  • 开发调试效率低:修改了一个小功能却需要重新 Build 整个项目才能看到结果,耗费时间。
  • 易阻断不同业务并行开发:一个业务模块的bug可能阻断其它业务模块的开发调试。
  • 版本管理困难:多人协同开发时,在版本管理中容易出现冲突和代码覆盖问题。

1.2 模块化

随着 AndroidStudio 支持多个 module 开发提出了模块化的概念。将一个复杂的项目按照业务、功能、界面或其它关注点拆分为多个模块进行解耦独立管理,所有业务模块依赖于基础库但彼此之间不做依赖(相互隔离,多人协同开发只负责各自的模块,避免了误修改和版本管理问题),使得每个业务模块能单独编译运行(提升了调试速度)。组件化和插件化都是模块化概念的不同实现。

组件化 插件化
单位 module apk
独立性 在打包时是一个引用库(library)集成到项目中,在调试时是一个应用(apk)能单独编译运行,但还是依附于整个项目中。 一个插件就是一个独立完整的APP,可以整合进更大的应用中,可以动态下载更新(动态加载、热更新、热修复)。
通信方式 根据一套统一的注册路由系统来统一实现跨组件通信。 不同插件是不同的进程。

三、代码架构(层级划分)

参考文章:移动架构这么多,如何一次搞定所有

3.1 分层

M层(Model 数据层) 负责数据的存取计算。
V层(View 视图层) 负责UI的显示更新。
X层(C、P、VM、I 逻辑层) 不同的架构区别在于对业务逻辑的实现方式(V和X的通信方式)。

3.2 通信

MVC

Model-View-Controller:V和C持有对方实例相互调用来通信。耦合度高。
MVP Model-View-Presenter:V和P持有对方实现的接口相互调用来通信。实现解耦但接口泛滥。
MVVM

Model-View-ViewModel:V单向持有ViewModel,可随意调用ViewModel中的方法进行逻辑处理并更新数据,V订阅观察ViewModel中的数据变化来自动更新显示。

MVI Model-View-Intent:V单向持有ViewModel,V只能发送被定义好的事件,ViewModel接收事件后分类判断进行对应的逻辑处理并更新数据,V订阅观察ViewModel中的数据变化来自动更新显示。

你可能感兴趣的:(架构,android)