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

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

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

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

-
動態(tài)注冊
@implementation?HomeModule BH_EXPORT_MODULE()??//聲明該類為模塊入口
在模塊入口類實(shí)現(xiàn)中 使用BH_EXPORT_MODULE()宏聲明該類為模塊入口實(shí)現(xiàn)類
異步加載
如果設(shè)置模塊導(dǎo)出為BH_EXPORT_MODULE(YES),則會在啟動之后第一屏內(nèi)容展現(xiàn)之前異步執(zhí)行模塊的初始化,可以優(yōu)化啟動時時間消耗
編程開發(fā)
BHModuleProtocol為各個模塊提供了每個模塊可以hook的函數(shù),用于實(shí)現(xiàn)插件邏輯以及代碼實(shí)現(xiàn)
-
設(shè)置環(huán)境變量
通過context.env可以判斷我們的應(yīng)用環(huán)境狀態(tài)來決定我們?nèi)绾闻渲梦覀兊膽?yīng)用
-(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
{
//注冊模塊的接口服務(wù)
[[BeeHive?shareInstance]?registerService:@protocol(UserTrackServiceProtocol)?service:[BHUserTrackViewController?class]];
}
-
處理系統(tǒng)事件
系統(tǒng)的事件會被傳遞給每個模塊,讓每個模塊自己決定編寫業(yè)務(wù)處理邏輯,比如3D-Touch功能
-(void)modQuickAction:(BHContext?*)context
{
[self?process:context.shortcutItem?handler:context.scompletionHandler];
}
模間調(diào)用
通過處理Event編寫各個業(yè)務(wù)模塊可以實(shí)現(xiàn)插件化編程,各業(yè)務(wù)模塊之間沒有任何依賴,core與module之間通過event交互,實(shí)現(xiàn)了插件隔離。但有時候我們需要模塊間的相互調(diào)用某些功能來協(xié)同完成功能。 通常會有三種形式的接口訪問形式
-
基于接口的實(shí)現(xiàn)Service訪問方式(java spring框架實(shí)現(xiàn))
-
基于函數(shù)調(diào)用約定實(shí)現(xiàn)的Export Method(PHP的extension,ReactNatve的擴(kuò)展機(jī)制)
-
基于跨應(yīng)用實(shí)現(xiàn)的Url route模式(iphone app之間的互訪)
我們目前實(shí)現(xiàn)了第一種方式,后續(xù)會逐步實(shí)現(xiàn)后兩種方式
Servcie訪問
Service訪問的優(yōu)點(diǎn)是可以編譯時檢查發(fā)現(xiàn)接口的變更,從而及時修正接口問題。缺點(diǎn)是需要依賴接口定義的頭文件,通過模塊增加得越多,維護(hù)接口定義的也有一定工作量。以為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對象中實(shí)現(xiàn)事件函數(shù)
聲明
-(BOOL)?singleton
{
return?YES;
}
通過createService獲取的對象則為單例對象,如果實(shí)現(xiàn)上面函數(shù)返回的是NO,則createService返回的是多例
id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];
上下文環(huán)境Context
-
初始化設(shè)置應(yīng)用的項目信息,并在各模塊間共享整個應(yīng)用程序的信息
-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions { [BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應(yīng)用的運(yùn)行開發(fā)環(huán)境 [BHContext?shareInstance].application?=?application; [BHContext?shareInstance].launchOptions?=?launchOptions; [BHContext?shareInstance].moduleConfigName?=?@"BeeHive.bundle/CustomModulePlist";//可選,默認(rèn)為BeeHive.bundle/BeeHive.plist [BHContext?shareInstance].serviceConfigName?=??@"BeeHive.bundle/CustomServicePlist";//可選,默認(rèn)為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; }
更多細(xì)節(jié)可以參考Example用例
集成方式
-
use cocoapods
pod "BeeHive", '1.0.0'
作者
一渡, shijie.qinsj@alibaba-inc.com
達(dá)茲, dazi.dp@alibaba-inc.com
- 1005 電子編程入門到工程師--單片機(jī)程序框架模塊化加速學(xué)習(xí)
- 單片機(jī)零基礎(chǔ)入門(8-5)模塊化編程
- 電路模塊化電路圖紙參考設(shè)計 15次下載
- 【C語言】模塊化編程-通俗易懂
- 藍(lán)橋杯模塊化編程
- 【單片機(jī)】Keil+Proteus流水燈(模塊化編程)
- 開關(guān)電源設(shè)計模塊化與并聯(lián)技術(shù)
- 模塊化逆變電源的設(shè)計與應(yīng)用總結(jié)
- 電賽模塊化程序案例下載 13次下載
- FPGA模塊化設(shè)計與AlteraHardCopy結(jié)構(gòu)化ASIC 7次下載
- 如何實(shí)現(xiàn)單片機(jī)C語言的模塊化編程 12次下載
- LCD1602液晶屏的模塊化編程程序和工程文件免費(fèi)下載 10次下載
- 單片機(jī)的C語言模塊化編程 51次下載
- 模塊化編程思想 16次下載
- 012-IIC總線原理和模塊化編程方法 7次下載
- 模塊化插座接線方法有哪些 2.9k次閱讀
- PLC模塊化和結(jié)構(gòu)化編程實(shí)例 1.9k次閱讀
- 模塊化機(jī)柜 vs.一體化機(jī)柜 1.5k次閱讀
- 如何模塊化編程 2k次閱讀
- 歐姆龍模塊化編程的使用技巧 3.3k次閱讀
- 如何實(shí)現(xiàn)單片機(jī)編程的模塊化設(shè)計 5.5k次閱讀
- 協(xié)作機(jī)器人編程模塊化的需求如何滿足? 4.5k次閱讀
- PLC模塊化編程和結(jié)構(gòu)化編程 9.3k次閱讀
- 單片機(jī)模塊化編程的原則有哪些 2.8k次閱讀
- 單片機(jī)模塊化編程串口中斷怎么處理 6.4k次閱讀
- 關(guān)于類別化與模塊化設(shè)計模式的解釋 6.1k次閱讀
- 解讀:一種基于模塊化設(shè)計的PLM平臺建設(shè) 2.2k次閱讀
- 模塊化UPS電源的構(gòu)成以及優(yōu)缺點(diǎn)盤點(diǎn) 7.6k次閱讀
- 模塊化電源有什么優(yōu)勢 7.2k次閱讀
- TAPI軟電話通信系統(tǒng)的模塊化設(shè)計 3k次閱讀
下載排行
本周
- 1耗盡型MOS FET產(chǎn)品目錄選型表
- 0.14 MB | 2次下載 | 免費(fèi)
- 2TI系列-米爾TI AM62L核心板開發(fā)板-高能效低功耗嵌入式平臺
- 1.51 MB | 次下載 | 免費(fèi)
- 3WILLSEMI韋爾20年半年度報告由代理分銷經(jīng)銷一級代理分銷經(jīng)銷
- 3.30 MB | 次下載 | 免費(fèi)
- 4LRC 樂山無線電InTWSApplications家電由原廠代理分銷經(jīng)銷一級代理分銷經(jīng)銷供應(yīng)
- 85.84 KB | 次下載 | 免費(fèi)
- 5LAT1596 一文說明白 STM32G4 雙 Bank 啟動與升級
- 0.64 MB | 次下載 | 5 積分
- 6LAT1594_基于事件喚醒低功耗之介紹
- 0.37 MB | 次下載 | 5 積分
- 7PT8P2309 觸控 A/D 型 8-Bit MCU規(guī)格書
- 4.05 MB | 次下載 | 免費(fèi)
- 8PT8P2308 觸控 A/D 型 8-Bit MCU規(guī)格書
- 4.13 MB | 次下載 | 免費(fèi)
本月
- 1美的電磁爐電路原理圖資料
- 4.39 MB | 19次下載 | 10 積分
- 2反激式開關(guān)電源設(shè)計解析
- 0.89 MB | 11次下載 | 5 積分
- 3耗盡型MOS FET產(chǎn)品目錄選型表
- 0.14 MB | 2次下載 | 免費(fèi)
- 4簡易光伏控制器原理圖資料
- 0.07 MB | 1次下載 | 5 積分
- 52EDL05x06xx系列 600V半橋門驅(qū)動器帶集成自舉二極管(BSD)手冊
- 0.69 MB | 1次下載 | 免費(fèi)
- 6國產(chǎn)千兆網(wǎng)口芯片PT153S中文資料
- 1.35 MB | 次下載 | 免費(fèi)
- 7斯丹電子 | 用于芯片測試系統(tǒng)的射頻干簧繼電器
- 5.11 MB | 次下載 | 免費(fèi)
- 8SFI立昌ESD/TVS管原廠代理分銷經(jīng)銷一級代理分銷經(jīng)銷
- 294.76 KB | 次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81605次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73829次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





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