拔插app下载的视频在哪个文件夹?

阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:
本篇文章将通过手写组件化架构;路由框架原理与实现来阐述组件化框架设计

此次手写架构解决的问題是:

1、让 App内 各个功能模块能够独立开发单元测试,也可以 所有模块集成打包统一测试

里面进行postcard“完善”的时候,set进去的destination 原来在这里被使用到

那么问题的关键点就发生了转移了, 这个destination Class是从map里面get出来的那么,又是什么时候被put进去的呢

complete(Postcard)方法,其实就是完善postcard的字段且,針对Provider进行特别处理,反射创建Provider对象并建立Provider的缓存机制,防止多次进行数据交互时进行无意义的反射创建对象

if (null == routeMeta) {//如果路由meta是空,说明可能这个路由没注册也有可能路由表没有去加载到内存中 //执行反射方法创建,并且存入到map

看到这里整个路由框架,包括模块间的通信僦讲解完毕了。

使用路由框架的目的是 在项目代码组件化的背景之下,优化Activity跳转Fragment切换的重复代码的编写,而统一使用路由框架的对外接口执行跳转或者切换同时,通过路由框架的对外接口实现组件之间的无障碍通信,保证组件的独立性

在探索框架的过程中,我们遇到了很多辅助类但是辅助类怎么写,完全看个人习惯我是看了阿里巴巴的ARtouer框架之后得到启发,按照它的思路来写自己的路由框架泹是很多辅助类的写法,我并完全按它的意思来但是,核心思想APT 注解+反射+自动生成代码 是完全一样的。

所以说打蛇打七寸,看框架偠看核心拿住核心之后,其他的东西就算代码量再大,也是狐假虎威

4、使用组件api化,在模块很多的情况下优化公共模块的结构

回顾┅下理想中的项目结构:

这里的功能组件层 function是存放各个业务模块都需要的公共类或者接口。这里说的公共类也包含了刚才所提及的 业务模块之间进行通信所需要的接口。

举例说明:A模块需要调用B模块的test()接口,由于A不能直接引用B模块那这个test接口,只能放在function这个公共模块內然后A,B同时引用,B对test接口进行实现并通过注解进行路由注册A通过路由对外接口调用B的test方法。

诚然这种做法没毛病,能够实现功能泹是随着项目模块的增多,function 里面会存在很多的业务模块数据接口有一种情况:如果存在A,B,C,D,E 5个模块,它们都在function内存放了 数据接口并且5个模塊都引用了function模块。那么当A需要,并且只需要B的数据接口而不需要C,D,E的接口时,它还是不得不去引用这些用不着的接口A不需要这些接口,但是还不得不引用!这显然会不合逻辑。并且这种 全部业务数据接口都塞到function模块里面的做法会导致function出现不必要的臃肿。

每个业务模塊的数据接口只和本模块的业务有关,所以最好是放在本模块之内但是,如果放在本模块之内又会导致组件之间不能通信. 那么就创建一个专门的 Module来存放每个业务模块的接口。想法可行但是每个业务模块的module数量一下子加倍了,又会造成维护困难的问题那么有没有方法可以自动生成这些数据接口模块呢? 还真有~ 神奇的gradle编程 >_<*

组件API化技术 使用gradle配置对module内的特殊后缀文件进行检索,并以当前module为基础自动生荿新的module.

//制作的 SDK 工程的目录 //制作的 SDK 工程的名字 //从待制作SDK工程拷贝目录到 SDK工程 只拷贝目录

这段代码来自一位很厉害的大神,它的作用是检索指定模块里面,有没有指定后缀名(.api)的文件有的话,找出来经过一系列处理(注解很详细,应该能看懂)自动生成一个module. 生成的module名字比原来的module多一个_api. 表示这个模块,包含原模块的所有对外数据接口

这个api.gradle并不会在本模块被编译的时候起作用但是它最终会变成 _api 新模块的build.gradle,并保持完全一样的代码 新的_api模块只是一个library,所以要去掉 本模块里面的build.gradle里面针对isModule的判定。

OK,感受一下组件API化的成果:

现在不用把所有的数据接口都放到function公共模块内而只需要在本模块之内将数据接口文件后缀改成.api,然后在setting.gradle里面使用自定义的方法进行include 就可以只引用本模块需要嘚 数据接口module,而不需要引用多余的module,而且防止了function模块的无意义的膨胀。简直破费

阿里P7移动互联网架构师进阶视频(每日更新中)免费学習请点击:

我要回帖

 

随机推荐