由ARouter引发的思考,到底什么是组件化和模块化?

这篇文章可能会饱受争议,大佬们可能会有不同的见解,以下内容仅个人观点,如果不妥请及时指出。

起因是最近想温习一下ARouter,只看不写,早晚荒废,于是开始写了一个demo,不写不要紧,一写就暴露了很多问题。

说到ARouter,肯定就是跨模块跳转,既然如此就建立两个模块呗,让这两个模块之间的界面进行跳转,这么简单的demo不一会就完成了吗
在这里插入图片描述
由app模块跳转到 im模块,写好之后发现报 There is no route match the path 的错误,没有找到匹配路径。

这里先整理出为了解决这个问题都经历了哪些坎坷(解决没有找到匹配路径的办法)

  1. 注解格式是否正确 类似 @Route(path = “/qqq/test1/second1”) 最少两条路径
  2. 不同模块下的第一个路径名字是否相同,不同模块的第一个路径不要一样
  3. 每个模块下是否引入了注解器
    Java:  annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    Kotlin:  kapt  'com.alibaba:arouter-compiler:1.2.2'
  1. 每个模块下是否都进行获取模块名操作,这里需要注意,Java与Kotlin写法有出入
    android – defaultConfig 内
     JAVA
     javaCompileOptions {
    
    
            annotationProcessorOptions {
    
    
                //注解处理器需要的模块名,作为路径映射的前缀
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
     Kotlin
     android上方添加:
     apply plugin: 'kotlin-android'
     apply plugin: 'kotlin-kapt'
     apply plugin: 'kotlin-android-extensions'
     
     kapt {
    
    
            arguments {
    
    
                arg("AROUTER_MODULE_NAME", project.getName())
            }
        }

如果以上没有中招还有一个检验办法,看run日志里面搜索

LogisticsCenter has already been loaded
LogisticsCenter has already been loaded, GroupIndex[4], InterceptorIndex[0], ProviderIndex[2][ ] 

GroupIndex[ ] 大于1说明有注册成功,不出意外的话:如果报没有找到路径此时 GroupIndex[1]

此时也不要慌,既然没有注册成功肯定是有原因的,有很大的可能性就是我们遇到了一个相同的问题 - 项目架构出现了问题

同标题,这里我遇到的是对跨模块跳转有了“误解”,既然是跨模块跳转,我创建了两个模块进行跳转,没毛病呀。通过疑问句的手法承上启下,引出下文 ->

什么是组件?什么是组件化?什么是模块?什么是模块化?

写这篇文章之前,我进行了大量的百度此类问题

好多博主都是将模块化作为标题,但是其中的项目框架中都是将所谓的“模块“以组件的形式引用的,当然这也没什么问题,只是会给人一种恍恍惚惚的错觉

这里我将以自己的理解进行一次梳理,仅供参考

组件、模块是两个实体化的东西,而组件化、模块化是两种虚化的东西

我们建立项目之后默认的的app 就是一个模块,新建的 module 也是一个模块,模块是可以作为一个独立的项目运行的,相当于两个 app ,就我创建的项目架构来看,相当于你想通过QQ的好友空间图标跳转到微信的朋友圈界面,这是不可能的,所以ARouter报出了未找到相关路径

而组件就如字面意思,组成该项目的零件,上面刚说了一个模块(module)相当于一个独立的项目,就可以转化为 组件是组成moudle的零件

总结:组件是组成一个项目的零件,模块是一个单独的项目

模块化是一种抽象的概念,实际与模块(module)没有必然联系,可以理解为重名了

模块化:我将一个项目分成 首页模块,我的模块相当于我将一盘瓜子分成 原味在左半盘与红枣味在右半盘

模块:我将一个项目分成两个项目 首页项目,我的项目相当于我将一盘瓜子分成两盘 原味一盘与红枣味一盘

此时Arouter就如盘内的一条虫子,想从一颗坏瓜子跑到另一条坏瓜子里面,当你把瓜子分成两盘之后,虫子就到不了另一个盘子里面去了

组件化:我家里有一辆兰博尼基,朋友想借几天开,太远了开过去不方便,那我发邮政吧,整体发不划算,我拆成几份分开发吧,能用优惠券,我拆成了车头,车屁股,车身子,我把我的爱车给组件化了

组件:车头,车身子和车屁股

那来到项目里就是将一个项目按模块分类(模块化),然后将这些模块以组件的形式(组件化)应用到项目里来 而不是以 module的形式,这就是为什么我们要将 com.android.application 改成 com.android.library

那Arouter 的跨模块跳转其实是跨组件跳转(因为一个组件就是一个模块),所以将我的项目架构修改成了

在这里插入图片描述
此时 im 和 library 作为 app的两个组件,他们两个之间的界面就能通过ARouter正常跳转了,Intent是跳不过去的,找不到相关界面。

以上如果看不明白,不要紧,来图解!
在这里插入图片描述
在这里插入图片描述

我在这两个组件内分别放这个项目的首页模块和我的模块,这样是不是也可以说成 模块之间的跳转呢?

猜你喜欢

转载自blog.csdn.net/As_thin/article/details/123896704