關(guān)于模塊化祟印,組件化

1.按業(yè)務(wù)分模塊,按功能分組件

CTMediator的方案

各個模塊通過CTMediator中的target-action方案調(diào)動

在CTMediator分類中是需要模塊的調(diào)度胸竞,對模塊起了一層封裝
CTMediator使用runtime動態(tài)創(chuàng)建Target和調(diào)用Target中的Action來實現(xiàn)解耦。

#import "CTMediator+A.h"
@implementation CTMediator (A)
- (UIViewController *)A_aViewController
{
    //調(diào)用Target_A的Action_viewController
    
    return [self performTarget:@"A" action:@"viewController" params:nil shouldCacheTarget:NO];
}
@end

在模塊A中寫好target-Action規(guī)則

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//我們在A工程中創(chuàng)建一個文件夾:Targets锦溪,然后看到A_Category里面有performTarget:@"A",所以我們新建一個對象府怯,叫做Target_A刻诊。
@interface Target_A : NSObject

//對應(yīng)的Action是viewController,于是在Target_A中新建一個方法:Action_viewController
- (UIViewController *)Action_viewController:(NSDictionary *)params;

@end

#import "Target_A.h"
#import "AViewController.h"
@implementation Target_A

- (UIViewController *)Action_viewController:(NSDictionary *)params
{
    AViewController *viewController = [[AViewController alloc] init];
    return viewController;
}

@end

ps:無法在編譯檢查階段檢測接口參數(shù)變更等問題

BeeHive

BHModuleProtocol

該框架的BHModuleProtocol是讓模塊有生命周期牺丙。

每個遵循BHModuleProtocol的模塊注冊后都會給BHModuleManager中做初始化存儲起來则涯,系統(tǒng)的事件會被傳遞給每個模塊,讓每個模塊自己決定編寫業(yè)務(wù)處理邏輯冲簿。

兩種注冊模式粟判,一種是靜態(tài)一種是動態(tài)

靜態(tài):
的在BeeHive.plist文件中注冊符合BHModuleProtocol協(xié)議模塊類

動態(tài):

/*
1. Annotation方式注冊
   編譯時動態(tài)處理,動態(tài)生成代碼
   通過BeeHiveMod宏進行Annotation可以在編譯時動態(tài)添加該模塊峦剔。
*/

@BeeHiveMod(LMHomeModule)
/*
 *   2.使用BH_EXPORT_MODULE宏注冊
 */
@implementation HomeModule

BH_EXPORT_MODULE()  // 聲明該類為模塊入口

@end

BHServiceProtocol

BHServiceProtocol是提供接口和規(guī)范接口的類档礁。

通過處理Event編寫各個業(yè)務(wù)模塊可以實現(xiàn)插件化編程,各業(yè)務(wù)模塊之間沒有任何依賴吝沫,core與module之間通過event交互呻澜,實現(xiàn)了插件隔離。但有時候我們需要模塊間的相互調(diào)用某些功能來協(xié)同完成功能惨险。

兩種注冊方式

1.API注冊

[[BeeHive shareInstance] registerService:@protocol(HomeServiceProtocol) service:[BHViewController class]];

2.BHService.plist注冊

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>HomeServiceProtocol</key>
        <string>BHViewController</string>
    </dict>
</plist>

對于有些場景下羹幸,我們訪問每個聲明Service的對象,希望對象能保留一些狀態(tài)辫愉,那我們需要聲明這個Service對象是一個單例對象栅受。

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

聲明

-(BOOL) singleton
{
    return YES;
}

service的注冊過程

service注冊后會給BHServiceManager中管理起來

//協(xié)議字符串作為key
    NSString *key = NSStringFromProtocol(service);
//implClass字符串左為value
    NSString *value = NSStringFromClass(implClass);
    
    if (key.length > 0 && value.length > 0) {
        [self.lock lock];
        [self.allServicesDict addEntriesFromDictionary:@{key:value}];
        [self.lock unlock];
    }

調(diào)用Service

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

上下文環(huán)境BHContext

初始化設(shè)置應(yīng)用的項目信息,并在各模塊間共享整個應(yīng)用程序的信息

[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]];

Demo地址

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冀墨,隨后出現(xiàn)的幾起案子闸衫,更是在濱河造成了極大的恐慌,老刑警劉巖诽嘉,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔚出,死亡現(xiàn)場離奇詭異,居然都是意外死亡虫腋,警方通過查閱死者的電腦和手機骄酗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悦冀,“玉大人趋翻,你說我怎么就攤上這事『畜。” “怎么了踏烙?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵师骗,是天一觀的道長。 經(jīng)常有香客問我讨惩,道長辟癌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任荐捻,我火速辦了婚禮黍少,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘处面。我一直安慰自己厂置,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布魂角。 她就那樣靜靜地躺著昵济,像睡著了一般。 火紅的嫁衣襯著肌膚如雪或颊。 梳的紋絲不亂的頭發(fā)上砸紊,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天传于,我揣著相機與錄音囱挑,去河邊找鬼。 笑死沼溜,一個胖子當(dāng)著我的面吹牛平挑,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播系草,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼通熄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了找都?” 一聲冷哼從身側(cè)響起唇辨,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎能耻,沒想到半個月后赏枚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晓猛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年饿幅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒职。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡栗恩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洪燥,到底是詐尸還是另有隱情磕秤,我是刑警寧澤乳乌,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站市咆,受9級特大地震影響钦扭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜床绪,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一客情、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癞己,春花似錦膀斋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绩社,卻和暖如春摔蓝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背愉耙。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工贮尉, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朴沿。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓猜谚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赌渣。 傳聞我的和親對象是個殘疾皇子魏铅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容