資料介紹
軟件簡介
BeeHive是用于ios的app模塊化編程的框架實現(xiàn)方案,吸收了Spring框架service的理念來實現(xiàn)模塊間的API耦合?;驹砣缦?
實現(xiàn)以下特性
-
插件化的模塊開發(fā)運行框架
-
模塊具體實現(xiàn)與接口調(diào)用分離
-
模塊生命周期管理,擴展了應(yīng)用的系統(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),六邊形的設(shè)計能帶來無限擴張的可能。所以我們用了BeeHive來做為這個項目的命名。
生命周期的變化
事件
BeeHive會給每個模塊提供生命周期事件,用于與BeeHive宿主環(huán)境進行必要信息交互 事件分為三種類型:
-
系統(tǒng)事件
-
通用事件
-
業(yè)務(wù)自定義事件
系統(tǒng)事件
系統(tǒng)事件通常是Application生命周期事件,例如DidBecomeActive、WillEnterBackground等 系統(tǒng)事件基本工作流如下:
通用事件
在系統(tǒng)事件的基礎(chǔ)之上,擴展了應(yīng)用的通用事件,例如modSetup、modInit等,可以用于編碼實現(xiàn)各插件模塊的設(shè)置與初始化
擴展的通用事件如下:
業(yè)務(wù)自定義事件
如果覺得系統(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)類
異步加載
如果設(shè)置模塊導出為BH_EXPORT_MODULE(YES),則會在啟動之后第一屏內(nèi)容展現(xiàn)之前異步執(zhí)行模塊的初始化,可以優(yōu)化啟動時時間消耗
編程開發(fā)
BHModuleProtocol為各個模塊提供了每個模塊可以hook的函數(shù),用于實現(xiàn)插件邏輯以及代碼實現(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ù)模塊可以實現(xiàn)插件化編程,各業(yè)務(wù)模塊之間沒有任何依賴,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的擴展機制)
-
基于跨應(yīng)用實現(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
-
初始化設(shè)置應(yīng)用的項目信息,并在各模塊間共享整個應(yīng)用程序的信息
-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions { [BHContext?shareInstance].env?=?BHEnvironmentDev;?//定義應(yīng)用的運行開發(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 電子編程入門到工程師--單片機程序框架模塊化加速學習
- 單片機零基礎(chǔ)入門(8-5)模塊化編程
- 電路模塊化電路圖紙參考設(shè)計 15次下載
- 【C語言】模塊化編程-通俗易懂
- 藍橋杯模塊化編程
- 【單片機】Keil+Proteus流水燈(模塊化編程)
- 開關(guān)電源設(shè)計模塊化與并聯(lián)技術(shù)
- 模塊化逆變電源的設(shè)計與應(yīng)用總結(jié)
- 電賽模塊化程序案例下載 12次下載
- FPGA模塊化設(shè)計與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)單片機編程的模塊化設(shè)計 4783次閱讀
- 協(xié)作機器人編程模塊化的需求如何滿足? 3951次閱讀
- PLC模塊化編程和結(jié)構(gòu)化編程 8714次閱讀
- 單片機模塊化編程的原則有哪些 2440次閱讀
- 單片機模塊化編程串口中斷怎么處理 5921次閱讀
- 關(guān)于類別化與模塊化設(shè)計模式的解釋 5467次閱讀
- 解讀:一種基于模塊化設(shè)計的PLM平臺建設(shè) 1755次閱讀
- 模塊化UPS電源的構(gòu)成以及優(yōu)缺點盤點 7273次閱讀
- 模塊化電源有什么優(yōu)勢 6755次閱讀
- TAPI軟電話通信系統(tǒng)的模塊化設(shè)計 2387次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論