Android 架构 - 概览

一、概念

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

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

1.1 单工程模式(小型应用)

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

  • 可读性下降:各种业务代码混杂在一个模块内,失去层次感。
  • 维护成本上升:开发人员需要了解各个业务避免改动影响其它业务,定位问题需要在多个业务代码中寻找和跳转。
  • 开发效率低:修改了一个小功能却需要重新 Build 整个项目才能看到结果,耗费时间。
  • 不利于多人协同开发:一个业务的bug可能阻断其它业务的开发调试,开发风格不同难以分割相互影响,版本管理中容易出现冲突和代码覆盖问题,相互之间有沟通成本。
  • 耦合高复用性差:分包约束性太差容易相互调用,业务难以抽离被新项目复用,后期更改起来麻烦。
模块化随着 AndroidStudio 工具的推出,支持多个 module 开发提出了模块化的概念。将一个复杂的项目按照业务拆分为多个模块进行独立管理,例如【首页】【消息】【直播间】。
组件化
插件化

1.2 模块化(业务解耦)

        随着 AndroidStudio 工具的推出,支持多个 module 开发提出了模块化的概念。

        将一个复杂的项目按照业务拆分为多个模块进行独立管理,例如小红书的【首页 module_Home】【购物 module_shop】【消息 module_msg】【我 module_me】,通常还有一个基础模块【公共 module_common】 提供 BaseActivity、图片加载、网络请求等功能。

 1.3 组件化(功能重用)

        组件化是基于可重用的目的,将应用按功能拆分成多个独立的组件,提升复用减少耦合。对单个功能进行开发,多个功能组件起来就是一个业务组件,多个业务组件组合起来就是一个应用。

        在打包时(集成模式)是一个引用库(Library)集成到项目中,在调试时(组件模式)是一个应用(Application)能单独编译运行,但还是依附于整个项目中。

模块化组件化
将应用按业务拆分将应用按功能拆分

1.4 插件化(频繁更新) 

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

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

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

3.1 分层

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

3.2 通信

MVC

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值