BeeHive - iOS模塊化之路

1幌衣、為什么要使用BeeHive模塊化

BeeHive是基于Java的Spring框架屿附,一個分發(fā)App狀態(tài)和統(tǒng)一Service的架構(gòu)形式郎逃,從而解決了多團(tuán)隊(duì)多開發(fā)人員協(xié)同開發(fā)中的耦合問題。就收益而言挺份,BeeHive更適合大型的多人項(xiàng)目以及快速移植的項(xiàng)目褒翰,小項(xiàng)目使用起來較復(fù)雜,有些得不償失匀泊。
BeeHive是一個正在成長的iOS框架优训,目前Star已1500+,希望大家可以集思廣益各聘,多提issues揣非、Pull Request,這樣BeeHive也能讓更多人受用躲因。試想一下我們也可以像蜜蜂一樣優(yōu)雅地搭建每個蜂窩模塊早敬。

蜂巢.png

模塊化是iOS必經(jīng)之路,模塊化的目的是實(shí)現(xiàn)解耦大脉,提升模塊搞监、組件的復(fù)用性。最近學(xué)習(xí)了很多镰矿,個人感覺阿里的BeeHive(直接跳轉(zhuǎn)中文文檔)Demo(Demo在BeeHive的Example文件夾里,很多小伙伴都找不到)確實(shí)很適合應(yīng)用到現(xiàn)在的實(shí)際開發(fā)中琐驴,舉個栗子吧。

MVC.png

MVC,MVVM绝淡,MVP等等等等···以大家熟悉的MVC為例宙刘,這樣的項(xiàng)目如果是一到兩人,業(yè)務(wù)不復(fù)雜的情況下牢酵,開發(fā)起來還是很合理的荐类,維護(hù)起來也很方便。隨著公司的發(fā)展茁帽,業(yè)務(wù)的擴(kuò)大,漸漸地你是否感覺屈嗤,這MVC怎么了潘拨,怎么沒以前好用了呢,這業(yè)務(wù)這么多饶号,有的是別人寫的铁追,我都不知道搞啥了,突然他的東西報(bào)錯了茫船,我還要解決······bulabulabula琅束,就像下面的圖,你的工程就是這樣的算谈。

耦合的工程.png

2涩禀、BeeHive模塊化編程的優(yōu)勢

BeeHive是用于iOS的App模塊化編程的框架實(shí)現(xiàn)方案,吸收了Spring框架Service的理念來實(shí)現(xiàn)模塊間的API耦合然眼。

使用BeeHive之后艾船,你的項(xiàng)目再也不會出現(xiàn)在MVC中遇到的問題。好處:

插件化的模塊開發(fā)

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

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

3屿岂、實(shí)現(xiàn)Demo

在看了好幾篇大神的文章,我還是一臉的懵逼鲸匿,估計(jì)是我境界不夠吧爷怀,就我個人而言吧,底層研究較少带欢,不管三七二十一运授,先搞出來,搞出來了洪囤,我們再慢慢研究底層徒坡,功能先實(shí)現(xiàn)了。O__O "…找來找去瘤缩,終于找到了Demo

官方的Demo很簡潔明了的給我們展示了BeeHive如何使用在項(xiàng)目中--傳送門

這個demo需要使用cocoapods喇完,你只需要在Example里直接命令pod install即可,還沒安裝cocoapods的同學(xué)可以安裝一下--cocoapods的安裝

第一步:

我們要替換系統(tǒng)的AppDelegate剥啤,使用我們自己的XXAppDelegate來接管AppDelegate锦溪。

AppDelegate.png

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

        [BHContext shareInstance].application = application;    
        [BHContext shareInstance].launchOptions = launchOptions;   
        [BHContext shareInstance].moduleConfigName = @"BeeHive.bundle/BeeHive";//可選不脯,默認(rèn)為BeeHive.bundle/BeeHive.plist  
        [BHContext shareInstance].serviceConfigName = @"BeeHive.bundle/BHService";    
        [BeeHive shareInstance].enableException = YES;   
        [[BeeHive shareInstance] setContext:[BHContext shareInstance]];  
        [[BHTimeProfiler sharedTimeProfiler] recordEventTime:@"BeeHive::super start launch"];        
        [super application:application didFinishLaunchingWithOptions:launchOptions];      
        idhomeVc = [[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;
}

第二步:

選中HomeServiceProtocol跳轉(zhuǎn)進(jìn)入,我們會發(fā)現(xiàn)刻诊,這個頭文件只有一個方法防楷,在跳轉(zhuǎn)進(jìn)入,這時(shí)候我們就發(fā)現(xiàn)了则涯,原來很簡單嘛复局!就是在BHViewController里面init()的時(shí)候,分別調(diào)用registerViewController方法創(chuàng)建4個控制器到Tabbar上。當(dāng)然粟判,還有我們的HomeModule文件也是要創(chuàng)建的亿昏,官方文檔描述的很詳細(xì)。好吧档礁,很強(qiáng)勢角钩,你皮任你皮我吃橘子皮。

HBViewController.png

-(instancetype)init{    
        self = [super init];   
        if (self) {        
                self.registerViewControllers = [[NSMutableArray alloc] initWithCapacity:1];      
                demoTableViewController *v1 = [[demoTableViewController alloc] init];        
                if ([v1 isKindOfClass:[UIViewController class]]) {         
                        [self registerViewController:v1 title:@"埋點(diǎn)" iconName:nil];   
                }               
                idv4 = [[BeeHive shareInstance] createService:@protocol(UserTrackServiceProtocol)];   
                if ([v4 isKindOfClass:[UIViewController class]]) {        
                [self registerViewController:(UIViewController *)v4 title:@"埋點(diǎn)3" iconName:nil];    
                }                    
        idv2 = [[BeeHive shareInstance] createService:@protocol(TradeServiceProtocol)];   
        if ([v2 isKindOfClass:[UIViewController class]]) {        
                v2.itemId = @"sdfsdfsfasf";     
                [self registerViewController:(UIViewController *)v2 title:@"交易2" iconName:nil];    
        }                                 
        ids2 = (id)[[BeeHive shareInstance] createService:@protocol(TradeServiceProtocol)];

                if ([s2 isKindOfClass:[UIViewController class]]) {
                        s2.itemId = @"例子222222";
                        [self registerViewController:(UIViewController *)s2 title:@"交易3" iconName:nil];
                }
        }

        return self;

}

第三步:

實(shí)現(xiàn)ShopModuleViewController呻澜,BHTradeViewController等控制器(Module很重要)递礼。

Controller.png

4、如何擴(kuò)展

第一步:

新建Protocol文件羹幸,以及新的ViewController和Module類

新建類.png

第二步:

新建Protocol文件,以及新的ViewController和Module類,按照文檔中的描述脊髓,注冊Protocol,Module,以及對Module進(jìn)行modinit和modsetup即可!

結(jié)束!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末睹欲,一起剝皮案震驚了整個濱河市供炼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窘疮,老刑警劉巖袋哼,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異闸衫,居然都是意外死亡涛贯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蔚出,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弟翘,“玉大人,你說我怎么就攤上這事骄酗∠∮啵” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵趋翻,是天一觀的道長睛琳。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么师骗? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任历等,我火速辦了婚禮,結(jié)果婚禮上辟癌,老公的妹妹穿的比我還像新娘寒屯。我一直安慰自己,他們只是感情好黍少,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布寡夹。 她就那樣靜靜地躺著,像睡著了一般厂置。 火紅的嫁衣襯著肌膚如雪要出。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天农渊,我揣著相機(jī)與錄音,去河邊找鬼或颊。 笑死砸紊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的囱挑。 我是一名探鬼主播醉顽,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼平挑!你這毒婦竟也來了游添?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤通熄,失蹤者是張志新(化名)和其女友劉穎唆涝,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體唇辨,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廊酣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赏枚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亡驰。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖饿幅,靈堂內(nèi)的尸體忽然破棺而出凡辱,到底是詐尸還是另有隱情,我是刑警寧澤栗恩,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布透乾,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏续徽。R本人自食惡果不足惜蚓曼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望钦扭。 院中可真熱鬧纫版,春花似錦、人聲如沸客情。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膀斋。三九已至梭伐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仰担,已是汗流浹背糊识。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摔蓝,地道東北人赂苗。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像贮尉,于是被迫代替她去往敵國和親拌滋。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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