天天看点

Android工程架构设计:组件化一(理解)一.模块化,组件化二.App中的模块化和组件化框架设计

当项目发展到一定程度,随着人员的增多,代码越来越臃肿,这时候就必须进行模块化(组件化)的拆分。

一.模块化,组件化

1.1.模块化(module)

模块化可以理解为“业务框架”或者“业务模块”。是指当我们的代码特别臃肿的时候,把项目里同一类型的功能逻辑进行需求性的拆分、整合、封装代码,分而治之。目的在于隔离代码,封装业务,具有高内聚性。

模块之间的依赖关系,可以通过路由器(推荐ARouter)实现模块间的解耦。

模块在整个架构体系中,位于中层业务架构层。模块拆分属于横向分块(登录,注册,设置……)。

一句话:模块是面向业务的,目的重在业务层解耦。

1.2.组件化(library)

组件化可以理解为把重复代码提炼封装成一个个组件开放提供功能服务。可以理解为“基础库”,“功能组件”。目的在于复用,解耦。app中的一切皆为组件,基本上分为:基础功能组件,通用UI组件,基础业务组件。

组件之间依赖较低,可独立封装。

组件在整个架构体系中,位于架构底层,被上层依赖。

一句话:组件是面向功能的,目的重在功能复用。

二.App中的模块化和组件化框架设计

2.1.模块 + 组件

在App项目群架构体系中,我们经常会构建一群 主app(也就是壳app),每个主app依赖一些按业务划分的module,module之间禁止横向依赖,每个module依赖一些具备各种功能且封装好的library(aar,jar) ……

如是开发模式中,我们可以按照上述(1.1, 1.2)对组件化,模块化的定义来做架构设计。那module就是我们的“业务模块”,对module的划分建立,也就是实施业务模块化的过程;而library即“功能组件”。整个App架构体系如下:

Android工程架构设计:组件化一(理解)一.模块化,组件化二.App中的模块化和组件化框架设计

如图所示:“模块 + 组件”App框架可以划分为:主app集群,业务模块(mudule),功能组件(通用UI组件,基础功能组件,第三方组件)(库)(Library)。

各横向业务模块之间完全独立,严格禁止直接依赖。其间数据传递,UI跳转等组件间通讯将以路由器的方式实现。

2.2.模块 + 组件(升级)

在“功能组件”部分,“基础功能组件”中往往会有一些和业务相关的功能需要独立封装复用,比如IM,Share(分享),支付,推送 …… 这些需求还不足以被划分成独立的“业务模块”,显得太大了,但是又跟业务需求息息相关,仅仅作为功能组件又显得太小了,所以作者这里把“功能组件”部分进一步细化为“业务功能组件”和“基础组件”。

“业务功能组件”部分指一些和业务相关的功能,尚不足以“业务模块”划分,且需要独立封装达到复用效果。同时具有解耦和复用的需求。

“基础组件”部分指与业务本身无关的功能组件,包括“通用UI”,“网络框架”,“数据库”,“第三方组件” ……,可以概括为 通用UI组件,基础功能组件,第三方组件。

Android工程架构设计:组件化一(理解)一.模块化,组件化二.App中的模块化和组件化框架设计

如图所示:“模块 + 组件”升级版App框架可以划分为:主app集群,业务模块(module),业务功能组件(IM,Share,Pay ……)(Component),功能组件(通用UI组件,基础功能组件,第三方组件)(库)(Library)。

即主App — > Module — > Component — > Library。

2.3.组件化

app中的一切皆为组件!!!在android 领域,模块化的具体实施方法分为插件化和组件化。一套完整的插件化或组件化都必须能够实现单独调试、集成编译、数据传输(接口 + 实现)、UI 跳转(路由)、生命周期和代码边界这六大功能。插件化和组件化最重要而且是唯一的区别的就是:是否能动态增加或修改线上功能模块。

抛开插件化不谈(不同类型app动态变更需求不同,采用方式不同),在实际开发过程中,模块化的拆分方式方法其实就是组件化,“业务模块”以“业务组件”的方式实现(module以library的方式被壳app所依赖),逐渐淡化了模块的概念,进而形成“组件化”架构体系:

Android工程架构设计:组件化一(理解)一.模块化,组件化二.App中的模块化和组件化框架设计

如图所示:“组件化”App框架可以划分为:主app集群,业务组件(Component),功能组件(业务功能组件)(Component),基础组件(通用UI组件,基础功能组件,第三方组件)(库)(Library)。逐层依赖,层间独立(各横向业务组件严禁直接依赖,彻底解耦。消息通讯,数据传递以Router实现)(各功能组件之间,基础组件之间相互独立)。组件化之后的App工程,代码结构清晰明了,编译时间缩短,开发和测试(组件单独编译测试,回归测点更明确,更有针对性,工作量大大减少)工作更高效,充分实现代码的高可复用和高可维护和高可扩展性。

2.4.组件通讯(ARouter)

App在划分组件时,为了达到充分解耦和复用,横向业务组件间严格禁止直接依赖,组件间消息通讯,数据传递以路由器(或者事件总线)的方式实现。Router作为单独的一个业务模块,被所有其他的业务模块所依赖,包括主App。

Router主要负责:

(1)业务组件之间页面跳转

(2)业务组件之间数据传递

(3)相互调用业务组件对外开放的服务(业务服务,数据服务)

这里推荐阿里ARouter。

2.5.组件化实施过程

1.业务拆分。

2.组件化框架设计搭建。

3.组件级独立开发,调试(底层library组件库,上层业务层独立业务功能组件)。

4.设计业务组件间通讯机制,对外提供数据传递服务

5.组件生命周期设定:加载,卸载,降维 ……

6.集成调试。

7.打包上线。

继续阅读