99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>BeeHive iOS模塊化編程框架

BeeHive iOS模塊化編程框架

2022-06-24 | zip | 0.29 MB | 次下載 | 2積分

資料介紹

授權(quán)協(xié)議 GPL
開發(fā)語言 Objective-C
軟件類型 開源軟件
所屬分類 iOS代碼庫

軟件簡介

BeeHive是用于ios的app模塊化編程的框架實(shí)現(xiàn)方案,吸收了Spring框架service的理念來實(shí)現(xiàn)模塊間的API耦合。基本原理如下:

pYYBAGKrCX2AD0gvAABTwfS5_OY744.jpg

實(shí)現(xiàn)以下特性

  • 插件化的模塊開發(fā)運(yùn)行框架

  • 模塊具體實(shí)現(xiàn)與接口調(diào)用分離

  • 模塊生命周期管理,擴(kuò)展了應(yīng)用的系統(tǒng)事件

因?yàn)榛赟pring的Service理念,雖然可以使模塊間的具體實(shí)現(xiàn)與接口解耦,但無法避免對(duì)接口類的依賴關(guān)系。

為什么不使用invoke以及動(dòng)態(tài)鏈接庫技術(shù)實(shí)現(xiàn)對(duì)接口實(shí)現(xiàn)的解耦,類似Apache的DSO的方式。

主要是考慮學(xué)習(xí)成本難度以及動(dòng)態(tài)調(diào)用實(shí)現(xiàn)無法在編譯檢查階段檢測接口參數(shù)變更等問題,動(dòng)態(tài)技術(shù)需要更高的編程門檻要求

BeeHive靈感來源于蜂窩。蜂窩是世界上高度模塊化的工程結(jié)構(gòu),六邊形的設(shè)計(jì)能帶來無限擴(kuò)張的可能。所以我們用了BeeHive來做為這個(gè)項(xiàng)目的命名。

生命周期的變化

事件

BeeHive會(huì)給每個(gè)模塊提供生命周期事件,用于與BeeHive宿主環(huán)境進(jìn)行必要信息交互 事件分為三種類型:

  • 系統(tǒng)事件

  • 通用事件

  • 業(yè)務(wù)自定義事件

系統(tǒng)事件

系統(tǒng)事件通常是Application生命周期事件,例如DidBecomeActive、WillEnterBackground等 系統(tǒng)事件基本工作流如下:

poYBAGKrCX-AHIaBAACnKX05rbo986.jpg

通用事件

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

擴(kuò)展的通用事件如下:

pYYBAGKrCYGAcNFoAADSk_QeXLw314.jpg

業(yè)務(wù)自定義事件

如果覺得系統(tǒng)事件、通用事件不足以滿足需要,我們還將事件封裝簡化成BHAppdelgate,你可以通過繼承BHAppdelegate來擴(kuò)展自己的事件。

注冊

模塊注冊的方式有靜態(tài)注冊與動(dòng)態(tài)注冊兩種

  • 靜態(tài)注冊

通過在BeeHive.plist文件中注冊符合BHModuleProtocol協(xié)議模塊類

poYBAGKrCYOAF-W2AAA6G49Ausw974.png

  • 動(dòng)態(tài)注冊

@implementation?HomeModule
BH_EXPORT_MODULE()??//聲明該類為模塊入口

在模塊入口類實(shí)現(xiàn)中 使用BH_EXPORT_MODULE()宏聲明該類為模塊入口實(shí)現(xiàn)類

異步加載

如果設(shè)置模塊導(dǎo)出為BH_EXPORT_MODULE(YES),則會(huì)在啟動(dòng)之后第一屏內(nèi)容展現(xiàn)之前異步執(zhí)行模塊的初始化,可以優(yōu)化啟動(dòng)時(shí)時(shí)間消耗

編程開發(fā)

BHModuleProtocol為各個(gè)模塊提供了每個(gè)模塊可以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;
}
}
  • 模塊初始化

如果模塊有需要啟動(dòng)時(shí)初始化的邏輯,可以在modInit里編寫,例如模塊注冊一個(gè)外部模塊可以訪問的Service接口

-(void)modInit:(BHContext?*)context
{
//注冊模塊的接口服務(wù)
[[BeeHive?shareInstance]?registerService:@protocol(UserTrackServiceProtocol)?service:[BHUserTrackViewController?class]];
}
  • 處理系統(tǒng)事件

系統(tǒng)的事件會(huì)被傳遞給每個(gè)模塊,讓每個(gè)模塊自己決定編寫業(yè)務(wù)處理邏輯,比如3D-Touch功能

-(void)modQuickAction:(BHContext?*)context
{
[self?process:context.shortcutItem?handler:context.scompletionHandler];
}

模間調(diào)用

通過處理Event編寫各個(gè)業(yè)務(wù)模塊可以實(shí)現(xiàn)插件化編程,各業(yè)務(wù)模塊之間沒有任何依賴,core與module之間通過event交互,實(shí)現(xiàn)了插件隔離。但有時(shí)候我們需要模塊間的相互調(diào)用某些功能來協(xié)同完成功能。 通常會(huì)有三種形式的接口訪問形式

  • 基于接口的實(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ù)會(huì)逐步實(shí)現(xiàn)后兩種方式

Servcie訪問

Service訪問的優(yōu)點(diǎn)是可以編譯時(shí)檢查發(fā)現(xiàn)接口的變更,從而及時(shí)修正接口問題。缺點(diǎn)是需要依賴接口定義的頭文件,通過模塊增加得越多,維護(hù)接口定義的也有一定工作量。以為HomeServiceProtocol為例

  • 定義HomeServiceProtocol暴露模塊對(duì)外訪問的接口

@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)];

單例與多例

對(duì)于有些場景下,我們訪問每個(gè)聲明為service的對(duì)象,希望對(duì)象能保留一些狀態(tài),那我們需要聲明這個(gè)service對(duì)象是一個(gè)單例對(duì)象。

我們只需要在service對(duì)象中實(shí)現(xiàn)事件函數(shù)

聲明

-(BOOL)?singleton
{
return?YES;
}

通過createService獲取的對(duì)象則為單例對(duì)象,如果實(shí)現(xiàn)上面函數(shù)返回的是NO,則createService返回的是多例

id?homeVc?=?[[BeeHive?shareInstance]?createService:@protocol(HomeServiceProtocol)];

上下文環(huán)境Context

  • 初始化設(shè)置應(yīng)用的項(xiàng)目信息,并在各模塊間共享整個(gè)應(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

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1DD3118電路圖紙資料
  2. 0.08 MB   |  1次下載  |  免費(fèi)
  3. 2AD庫封裝庫安裝教程
  4. 0.49 MB   |  1次下載  |  免費(fèi)
  5. 3PC6206 300mA低功耗低壓差線性穩(wěn)壓器中文資料
  6. 1.12 MB   |  1次下載  |  免費(fèi)
  7. 4網(wǎng)絡(luò)安全從業(yè)者入門指南
  8. 2.91 MB   |  1次下載  |  免費(fèi)
  9. 5DS-CS3A P00-CN-V3
  10. 618.05 KB  |  1次下載  |  免費(fèi)
  11. 6海川SM5701規(guī)格書
  12. 1.48 MB  |  次下載  |  免費(fèi)
  13. 7H20PR5電磁爐IGBT功率管規(guī)格書
  14. 1.68 MB   |  次下載  |  1 積分
  15. 8IP防護(hù)等級(jí)說明
  16. 0.08 MB   |  次下載  |  免費(fèi)

本月

  1. 1貼片三極管上的印字與真實(shí)名稱的對(duì)照表詳細(xì)說明
  2. 0.50 MB   |  103次下載  |  1 積分
  3. 2涂鴉各WiFi模塊原理圖加PCB封裝
  4. 11.75 MB   |  89次下載  |  1 積分
  5. 3錦銳科技CA51F2 SDK開發(fā)包
  6. 24.06 MB   |  43次下載  |  1 積分
  7. 4錦銳CA51F005 SDK開發(fā)包
  8. 19.47 MB   |  19次下載  |  1 積分
  9. 5PCB的EMC設(shè)計(jì)指南
  10. 2.47 MB   |  16次下載  |  1 積分
  11. 6HC05藍(lán)牙原理圖加PCB
  12. 15.76 MB   |  13次下載  |  1 積分
  13. 7802.11_Wireless_Networks
  14. 4.17 MB   |  12次下載  |  免費(fèi)
  15. 8蘋果iphone 11電路原理圖
  16. 4.98 MB   |  6次下載  |  2 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420064次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191390次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183342次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81588次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73815次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65989次下載  |  10 積分