最简单有效的Android组件化方案 之 组件化需要考虑的几个问题

最简单有效的Android组件化方案,github开源地址 https://github.com/beyondxia/modules

    上一篇文章,我们讨论了目前传统的解耦方案和通信机制。其实解耦只是我们实施组件化的第一步,要做到真正的组件化,还需要针对业务模块做代码的独立分仓,lib话(aar化),模块能够以aar库的形式集成到主APP,进一步提供模块的独立性,甚至可以及其方便的进行组件的安装和卸载。

  1. 如何确保模块之间绝对的解耦完成
  2. 如何进行代码的分仓,中间可能会涉及到哪些问题
  3. 如何极简的做到模块的接入和下线需求。

    我们先从第二个问题开始讨论,就是【如何进行代码的分仓,中间可能会涉及到哪些问题】。

    在我所开发的几个大型项目当中,涉及到组件化的需求,都是在项目有小到大发展到一定程度,业务模块越来越多,开发人员数量达到一定数量时,才开始对项目进行组件化的规划。这就意味着,项目刚开始时,我们所有的模块都是在一个代码仓内进行开发的,开发人员也都是在一起开发,模块界限不是很明确。这种情况下,我们再对模块进行组件化拆分,会涉及哪些问题呢:

  1. 比如A模块希望获取B模块的model数据、自定义view、fragment等,但是这些结构的定义是在B中定义的,A中无法找到定义;
  2. 再比如几个模块需要共享一些资源 文件(如图片,layout,value等)等,我们不可能把相同的资源每个模块中都保留一份。

    我们知道,模块功能暴露以接口方式暴露,接口是需要放中间服务层的,如下图:


image.png

    针对上面的问题,我们也可以和服务接口一样,把相应的共享数据放在服务层。只不过共享的资源文件,我们建议以独立的module库放在服务层,各个业务模块根据需求可以选择是否依赖该module库。

    接下来,我们再来讨论第一个问题【何确保模块之间绝对的解耦完成】这儿又分为两种情况:

  1. 如何保证子模块之间没有任何依赖
  2. 如何保证主app对子模块是没有依赖的。

    对于第一个问题,只要子模块的依赖依赖列表(gradle- dependencies)中没有对其他模块的依赖,就可以绝对保证本模块和其他模块之间是绝对解耦的。

    第二个问题,如何保证主APP对子模块没有绝对的依赖呢,我们知道,主APP如果希望集成子模块,就必须依赖子模块。我们可以使用新版gradle插件依赖选项runtimeOnly,只在运行时可以使用,编译时依赖直接报错。

通过这种方式,可以保证各个模块和主App之间达到绝对的解耦。

    下面我们接着讨论第三个问题【如何极简的做到模块的接入和下线需求】:

    对一个新的业务模块,我们要能够一个极简的方式接入我们的主APP,这很重要,这决定这业务方的接入成本和接入意愿。这就要求我们的框架(特别是解耦框架)能够在极小的代码改动量的情况下,能够快速接入主APP,这部分内容,我们会在后续的文章中详细说明:最简单有效的Android组件化方案 之 传统组件化方案的问题

    那如果我们希望在某些特定的场景或版本中,下线某些业务模块,那该怎么办呢?这里我们需要考虑两个问题:

  1. 代码打包中,可以选择性的打包某些业务模块
  2. 下线后,对于正常的模块间的调用,app的稳定性要能得到保证,不能因为调用了一个不存在的模块而导致APP编译不通过或应用运行crash。针对问题1,很好解决,主APP中选择性的依赖某些模块即可。第二个问题,就对我们的框架有一定的要求了,我们的解耦,总线,路由框架要能够有一定的异常处理机制,比如:对于某些可能要下线的模块,其他模块在调用的之后,框架可以抛出一个模块不存在的异常,调用方必须捕获该异常。

服务提供:

public abstract class LoginService extends PAService implements ILogin {
    public static ILogin get() throws NoServiceException {
        return getService(SERVICE_NAME);
    }
}

调用方:

String username = null;
try {
    username = LoginService.get().getUserName();
} catch (NoServiceException e) {
    e.printStackTrace();
}

上一篇:最简单有效的Android组件化方案 之 APP组件化简介

下一篇:最简单有效的Android组件化方案 之 传统组件化方案的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容