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)雅地搭建每個蜂窩模塊早敬。
模塊化是iOS必經(jīng)之路,模塊化的目的是實(shí)現(xiàn)解耦大脉,提升模塊搞监、組件的復(fù)用性。最近學(xué)習(xí)了很多镰矿,個人感覺阿里的BeeHive(直接跳轉(zhuǎn)中文文檔)Demo(Demo在BeeHive的Example文件夾里,很多小伙伴都找不到)確實(shí)很適合應(yīng)用到現(xiàn)在的實(shí)際開發(fā)中琐驴,舉個栗子吧。
MVC,MVVM绝淡,MVP等等等等···以大家熟悉的MVC為例宙刘,這樣的項(xiàng)目如果是一到兩人,業(yè)務(wù)不復(fù)雜的情況下牢酵,開發(fā)起來還是很合理的荐类,維護(hù)起來也很方便。隨著公司的發(fā)展茁帽,業(yè)務(wù)的擴(kuò)大,漸漸地你是否感覺屈嗤,這MVC怎么了潘拨,怎么沒以前好用了呢,這業(yè)務(wù)這么多饶号,有的是別人寫的铁追,我都不知道搞啥了,突然他的東西報(bào)錯了茫船,我還要解決······bulabulabula琅束,就像下面的圖,你的工程就是這樣的算谈。
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锦溪。
- (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)勢角钩,你皮任你皮我吃橘子皮。
-(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很重要)递礼。
4、如何擴(kuò)展
第一步:
新建Protocol文件羹幸,以及新的ViewController和Module類
第二步:
新建Protocol文件,以及新的ViewController和Module類,按照文檔中的描述脊髓,注冊Protocol,Module,以及對Module進(jìn)行modinit和modsetup即可!