BeeHive模块注册

BeeHive是阿里巴巴开源的一个模块化框架,是app模块化编程的一种实现方案。都知道项目一旦大了起来单单的mvc架构就很难支撑了,由此我们需要将代码模块化处理,对业务模块进行业务分离,达到内聚、分离的效果。beehive也是由此而生,虽还不够完善,但是模块化思想还是值得学习总结的。

BeeHive框架主体包含两部分:(1)Modules的管理(2)Protocol的管理

先总结下BeeHive是怎么对模块进行拆分与管理的。

首先是进行模块注册,在BeeHive中是通过BHModuleManager来管理各个模块的。BHModuleManager中只会管理已经被注册过的模块。注册方式有三种:

(1)通过BeeHiveMod(name)宏

大概意思就是我们需要指定一个特殊的段,来存放我们想要的数据。这里我们就把数据存在保存初始化过的全局静态变量和局部静态变量的data数据段里面的"BeehiveMods"段中。

有存自然就有取,取的代码在BHAnnotation中管理着

这里的sectionName其实就是我们定义BeeHiveDATA时所传的sectname,返回的configs数组包含着我们所有通过BeeHiveMod宏注册的class名字符串数组。拿到我们注册了的这个数组要做什么呢

实际上只是遍历了一下然后就把这个数组拿给BHModuleManager去处理了,这里有些疑惑,不知道是不是因为版本更新了的缘故,mods在现在的demo里已经不是单例了,还不确定这样改的意义何在会不会有什么影响。

接下来就是BHModuleManager里面的事情了,也是核心处理的地方:

一些需要说明已经在上述代码里面添加了注释。BHModules是一个NSMutableArray,里面存的都是一个个的字典,字典里面有两个Key,一个是@"moduleLevel",另一个是@"moduleClass"。存储已经注册的Module的时候都要判断Level。还有一点需要说明的,所有需要注册的Module必须遵循BHModuleProtocol协议,否则不能被存储。Level具体有什么用后面再说。
 

(2)加载plist文件

实际上这里就是将我们注册的地方写到plist文件中,解析一下plist文件将dictionary添加到BHModules中,与上面大相径庭。

(3)使用Load方法注册

第三种方法就是在类中重写load方法给当前类进行注册,这里也有个疑问,load方法只有在文件被引用的时候才会调用,如果module文件没有被引用怎么注册呢。

Load方法还可以用一个宏BH_EXPORT_MODULE来完成,其中isAsync传yes表示module为异步加载。反之为同步加载。

到这里Modules已经全部注册完成了。

 

posted on 2017-12-15 09:19  jack.xi  阅读(629)  评论(0)    收藏  举报

导航