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已经全部注册完成了。

转载于:https://www.cnblogs.com/byxixiblogs/p/8024573.html

BeeHive模块注册相关推荐

  1. Kubeedge Beehive 模块源码分析

    文章目录 概述 结构 Model --- 消息模型 Header --- 消息头 Router --- 消息路由 资源操作 资源类型 Context --- 上下文 ModuleContext --- ...

  2. 【金猿技术展】模块注册机制——打造AI算法流水线

    上海人工智能实验室&商汤科技技术 本项目由上海人工智能实验室&商汤科技投递并参与"数据猿年度金猿策划活动--2021大数据产业创新技术突破榜榜单及奖项"评选. 数据 ...

  3. 练习-用户模块-注册与登陆 190907

    用户模块的开发 主要两个功能 一,用户注册 网址:/regist 需求说明: >一 注册 提交后,把用户名与密码存入数据库中 存入数据时,使用md5方式加密,不加盐 >二 跳转 注册成功, ...

  4. [LibTorch] 参数注册 模块注册

    参考文档 Using the PyTorch C++ Frontend The C++ Frontend 文章目录 Linear Conv2d & BatchNorm2d Pool & ...

  5. Lua 5.4.4函数、模块注册

    1. 函数注册 Lua 5.4.4 变化比较大,从5.2后就变了 static void my_fun(lua_State* lua) {const int arg1 = luaL_checkinte ...

  6. 4g模块注册上网 移远_Openwrt实现4G模块上网功能

    Openwrt 实现 4G 模块上网功能 上海润欣科技股份有限公司创研社 大家都知道传统的路由器无非基于以下几种方式上网: 首先运营商会将网线拉入居室,该网络可以是传统的电话线 / 双绞线 / 光纤. ...

  7. 4g模块注册上网 移远_通信模组企业 移远通信amp;广和通

    无线通信模组通常长这个样,它是物联网设备中的关键部件. 1. 通信模组介绍无线模组为物联网开发者提供了便利,使开发者可以专注于特定应用领域业务的开发而不用关注通信协议的技术细节.无线通信模组厂商通常会 ...

  8. 4g模块注册上网 移远_Openwrt支持移远4G模块过程记录

    参考了不少教程,也做了不少尝试,最后记录下整个过程以便自己和坛友们参考 我所用的4G模块是Quectel EC20 R2.0,对于这个型号以下的操作前半部分修改USB Serial驱动应该是不需要的, ...

  9. 4g模块注册上网 移远_物联网模组龙头移远通信

    本周末我们一起梳理一下最近刷策略报告通信板块见到的两只比较高频的标的移远通信和广和通,今天我们先一起梳理一下移远通信,公司主营业务是从事物联网领域无线通信模组及其解决方案的设计.生产.研发与销售服务, ...

最新文章

  1. 2018.5.18信息安全铁人三项赛数据赛复现
  2. 认识JVM--第一篇-对象分配回收算法
  3. oracle+11g+rda,Oracle RDA 4.20 初体验
  4. 3款动态网页时间时钟HTML5源码
  5. c# 整数除法取整_Java 如何取整整数除法的结果?
  6. Java并发编程-线程安全基础
  7. 高品质UI设计模板|PSD下载,设计师的最佳临摹素材
  8. 计算机二级数据库系统知识点,2020年全国计算机二级Access复习知识点:分布式数据库系统...
  9. python爬淘宝评论源代码_一篇文章教会你用Python爬取淘宝评论数据(写在记事本)...
  10. 2021-08-18我的第一篇博客——STM32单片机的开发环境Keil5(MDK)的安装与破解
  11. ubuntu 10.04 下安装 wine 所得所获【转】
  12. 鸿蒙造化体内微粒,开辟鸿蒙,谁为情种?
  13. 基于android系统的单词学习软件设计与开发【附项目源码+论文说明】分享
  14. Note: Bimodal Content Defined Chunking for Backup Streams
  15. 2019 年第 7 周 DApp 影响力排行榜 | TokenInsight
  16. Android 获取某个文件夹下的所有文件
  17. 单目标优化:飞狐优化算法(Flying Foxes Optimization,FFO)求解cec2017(提供Matlab代码)
  18. TCP滑动窗口、流量控制及拥塞控制详解
  19. SQL Server Profiler 简单使用说明
  20. 问题解决:cannot find -lmysqlclient

热门文章

  1. Centos(6、7) —— yum源的配置
  2. shiro学习总结(一)----初识shiro
  3. 自动化测试前序(https://blog.csdn.net/ling_mochen/article/details/79314118)
  4. DAPP开发初探——永存的留言
  5. 【uoj#225】[UR #15]奥林匹克五子棋 构造
  6. Java中的冒泡排序(减少比较次数)
  7. Unity使用 16bit 压缩 Texture 颜色能均匀过渡
  8. Cocos2d—声音API
  9. 项目开发过程中遇到的一些问题和解决办法(逐渐添加)
  10. 奇异值分解和图像压缩