資料介紹
軟件簡介
BeeHive是用于ios的app模塊化編程的框架實現(xiàn)方案,吸收了Spring框架service的理念來實現(xiàn)模塊間的API耦合?;驹砣缦?

實現(xiàn)以下特性
-
插件化的模塊開發(fā)運行框架
-
模塊具體實現(xiàn)與接口調(diào)用分離
-
模塊生命周期管理,擴展了應用的系統(tǒng)事件
因為基于Spring的Service理念,雖然可以使模塊間的具體實現(xiàn)與接口解耦,但無法避免對接口類的依賴關(guān)系。
為什么不使用invoke以及動態(tài)鏈接庫技術(shù)實現(xiàn)對接口實現(xiàn)的解耦,類似Apache的DSO的方式。
主要是考慮學習成本難度以及動態(tài)調(diào)用實現(xiàn)無法在編譯檢查階段檢測接口參數(shù)變更等問題,動態(tài)技術(shù)需要更高的編程門檻要求
BeeHive靈感來源于蜂窩。蜂窩是世界上高度模塊化的工程結(jié)構(gòu),六邊形的設計能帶來無限擴張的可能。所以我們用了BeeHive來做為這個項目的命名。
生命周期的變化
事件
BeeHive會給每個模塊提供生命周期事件,用于與BeeHive宿主環(huán)境進行必要信息交互 事件分為三種類型:
-
系統(tǒng)事件
-
通用事件
-
業(yè)務自定義事件
系統(tǒng)事件
系統(tǒng)事件通常是Application生命周期事件,例如DidBecomeActive、WillEnterBackground等 系統(tǒng)事件基本工作流如下:

通用事件
在系統(tǒng)事件的基礎之上,擴展了應用的通用事件,例如modSetup、modInit等,可以用于編碼實現(xiàn)各插件模塊的設置與初始化
擴展的通用事件如下:

業(yè)務自定義事件
如果覺得系統(tǒng)事件、通用事件不足以滿足需要,我們還將事件封裝簡化成BHAppdelgate,你可以通過繼承BHAppdelegate來擴展自己的事件。
注冊
模塊注冊的方式有靜態(tài)注冊與動態(tài)注冊兩種
-
靜態(tài)注冊
通過在BeeHive.plist文件中注冊符合BHModuleProtocol協(xié)議模塊類

-
動態(tài)注冊
@implementation?HomeModule BH_EXPORT_MODULE()??//聲明該類為模塊入口
在模塊入口類實現(xiàn)中 使用BH_EXPORT_MODULE()宏聲明該類為模塊入口實現(xiàn)類
異步加載
如果設置模塊導出為BH_EXPORT_MODULE(YES),則會在啟動之后第一屏內(nèi)容展現(xiàn)之前異步執(zhí)行模塊的初始化,可以優(yōu)化啟動時時間消耗
編程開發(fā)
BHModuleProtocol為各個模塊提供了每個模塊可以hook的函數(shù),用于實現(xiàn)插件邏輯以及代碼實現(xiàn)
-
設置環(huán)境變量
通過context.env可以判斷我們的應用環(huán)境狀態(tài)來決定我們?nèi)绾闻渲梦覀兊膽?/p>
-(void)modSetup:(BHContext?*)context
{
switch?(context.env)?{
case?BHEnvironmentDev:
//....初始化開發(fā)環(huán)境
break;
case?BHEnvironmentProd:
//....初始化生產(chǎn)環(huán)境
default:
break;
}
}
-
模塊初始化
如果模塊有需要啟動時初始化的邏輯,可以在modInit里編寫,例如模塊注冊一個外部模塊可以訪問的Service接口
-(void)modInit:(BHContext?*)context
{
//注冊模塊的接口服務
[[BeeHive?shareInstance]?registerService:@protocol(UserTrackServiceProtocol)?service:[BHUserTrackViewController?class]];
}
-
處理系統(tǒng)事件
系統(tǒng)的事件會被傳遞給每個模塊,讓每個模塊自己決定編寫業(yè)務處理邏輯,比如3D-Touch功能
-(void)modQuickAction:(BHContext?*)context
{
[self?process:context.shortcutItem?handler:context.scompletionHandler];
}
模間調(diào)用
通過處理Event編寫各個業(yè)務模塊可以實現(xiàn)插件化編程,各業(yè)務模塊之間沒有任何依賴,core與module之間通過event交互,實現(xiàn)了插件隔離。但有時候我們需要模塊間的相互調(diào)用某些功能來協(xié)同完成功能。 通常會有三種形式的接口訪問形式
-
基于接口的實現(xiàn)Service訪問方式(java spring框架實現(xiàn))
-
基于函數(shù)調(diào)用約定實現(xiàn)的Export Method(PHP的extension,ReactNatve的擴展機制)
-
基于跨應用實現(xiàn)的Url route模式(iphone app之間的互訪)
我們目前實現(xiàn)了第一種方式,后續(xù)會逐步實現(xiàn)后兩種方式
Servcie訪問
Service訪問的優(yōu)點是可以編譯時檢查發(fā)現(xiàn)接口的變更,從而及時修正接口問題。缺點是需要依賴接口定義的頭文件,通過模塊增加得越多,維護接口定義的也有一定工作量。以為HomeServiceProtocol為例
-
定義HomeServiceProtocol暴露模塊對外訪問的接口
@protocol?HomeServiceProtocol?-(void)registerViewController:(UIViewController?*)vc?title:(NSString?*)title?iconName:(NSString?*)iconName; @end
-
注冊Service有三種方式
-
聲明式注冊
@implementation?HomeService BH_EXPORT_SERVICE()
-
API注冊
[[BeeHive?shareInstance]?registerService:@protocol(HomeServiceProtocol)?service:[BHViewController?class]];
-
BHService.plist注冊
HomeServiceProtocol BHViewController
-
調(diào)用
#import?"BHService.h" id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];
單例與多例
對于有些場景下,我們訪問每個聲明為service的對象,希望對象能保留一些狀態(tài),那我們需要聲明這個service對象是一個單例對象。
我們只需要在service對象中實現(xiàn)事件函數(shù)
聲明
-(BOOL)?singleton
{
return?YES;
}
通過createService獲取的對象則為單例對象,如果實現(xiàn)上面函數(shù)返回的是NO,則createService返回的是多例
id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];
上下文環(huán)境Context
-
初始化設置應用的項目信息,并在各模塊間共享整個應用程序的信息
-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions { [BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應用的運行開發(fā)環(huán)境 [BHContext?shareInstance].application?=?application; [BHContext?shareInstance].launchOptions?=?launchOptions; [BHContext?shareInstance].moduleConfigName?=?@"BeeHive.bundle/CustomModulePlist";//可選,默認為BeeHive.bundle/BeeHive.plist [BHContext?shareInstance].serviceConfigName?=??@"BeeHive.bundle/CustomServicePlist";//可選,默認為BeeHive.bundle/BHService.plist [[BeeHive?shareInstance]?setContext:[BHContext?shareInstance]]; [super?application:application?didFinishLaunchingWithOptions:launchOptions]; id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)]; if?([homeVc?isKindOfClass:[UIViewController?class]])?{ UINavigationController?*navCtrl?=?[[UINavigationController?alloc]?initWithRootViewController:(UIViewController*)homeVc]; self.window?=?[[UIWindow?alloc]?initWithFrame:[UIScreen?mainScreen].bounds]; self.window.rootViewController?=?navCtrl; [self.window?makeKeyAndVisible]; } return?YES; }
更多細節(jié)可以參考Example用例
集成方式
-
use cocoapods
pod "BeeHive", '1.0.0'
作者
- 1005 電子編程入門到工程師--單片機程序框架模塊化加速學習
- 單片機零基礎入門(8-5)模塊化編程
- 電路模塊化電路圖紙參考設計 15次下載
- 【C語言】模塊化編程-通俗易懂
- 藍橋杯模塊化編程
- 【單片機】Keil+Proteus流水燈(模塊化編程)
- 開關(guān)電源設計模塊化與并聯(lián)技術(shù)
- 模塊化逆變電源的設計與應用總結(jié)
- 電賽模塊化程序案例下載 12次下載
- FPGA模塊化設計與AlteraHardCopy結(jié)構(gòu)化ASIC 6次下載
- 如何實現(xiàn)單片機C語言的模塊化編程 11次下載
- LCD1602液晶屏的模塊化編程程序和工程文件免費下載 10次下載
- 單片機的C語言模塊化編程 51次下載
- 模塊化編程思想 16次下載
- 012-IIC總線原理和模塊化編程方法 7次下載
- 模塊化插座接線方法有哪些 697次閱讀
- PLC模塊化和結(jié)構(gòu)化編程實例 1091次閱讀
- 模塊化機柜 vs.一體化機柜 745次閱讀
- 如何模塊化編程 1338次閱讀
- 歐姆龍模塊化編程的使用技巧 2068次閱讀
- 如何實現(xiàn)單片機編程的模塊化設計 4783次閱讀
- 協(xié)作機器人編程模塊化的需求如何滿足? 3951次閱讀
- PLC模塊化編程和結(jié)構(gòu)化編程 8714次閱讀
- 單片機模塊化編程的原則有哪些 2440次閱讀
- 單片機模塊化編程串口中斷怎么處理 5921次閱讀
- 關(guān)于類別化與模塊化設計模式的解釋 5467次閱讀
- 解讀:一種基于模塊化設計的PLM平臺建設 1755次閱讀
- 模塊化UPS電源的構(gòu)成以及優(yōu)缺點盤點 7273次閱讀
- 模塊化電源有什么優(yōu)勢 6755次閱讀
- TAPI軟電話通信系統(tǒng)的模塊化設計 2387次閱讀
下載排行
本周
- 1人工智能+消費:技術(shù)賦能與芯片驅(qū)動未來
- 15.25 MB | 4次下載 | 免費
- 2?業(yè)電源&模塊電源產(chǎn)品?冊
- 15.40 MB | 1次下載 | 免費
- 379M15 TO-252三端穩(wěn)壓IC規(guī)格書
- 0.86 MB | 次下載 | 免費
- 4MBRD20150CT TO-252肖特基二極管規(guī)格書
- 0.54 MB | 次下載 | 免費
- 5自動鎖螺絲運動控制系統(tǒng)用戶手冊
- 6.65 MB | 次下載 | 5 積分
- 6奧特光耦產(chǎn)品手冊
- 4.83 MB | 次下載 | 免費
- 7SMA系列10MHz~40GHz同軸檢波器
- 559.60 KB | 次下載 | 免費
- 8CD7388CZ:7W×4 四通道音頻功率放大電路技術(shù)手冊
- 0.39 MB | 次下載 | 10 積分
本月
- 1元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 241次下載 | 免費
- 2元宇宙底層硬件系列報告
- 13.42 MB | 184次下載 | 免費
- 32022 年展望報告 – 半導體產(chǎn)業(yè)
- 1.43 MB | 136次下載 | 免費
- 4晶振與濾波器應用電路《電子工程師必備:元器件應用寶典》
- 1.57 MB | 90次下載 | 免費
- 5汽車電子行業(yè)深度解析:智能化與電動化方興未艾
- 6.47 MB | 71次下載 | 免費
- 6中國DPU行業(yè)白皮書
- 23.80 MB | 37次下載 | 免費
- 7晶科鑫代理線-微盟電子2021年度產(chǎn)品目錄選型手冊
- 14.75 MB | 27次下載 | 免費
- 8SJK晶振產(chǎn)品目錄-簡化版-2022
- 13.77 MB | 20次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935134次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233089次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191425次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183352次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81602次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73822次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App






創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論