美文网首页
BeeHive组件化框架

BeeHive组件化框架

作者: 坤哥爱卿 | 来源:发表于2020-07-09 15:02 被阅读0次

前言:

最近公司要使用阿里的BeeHive组件化框架,下面是学习的心得体会,偏向于使用层面,仅供参考!

一、组件化

通过构建中间层来组件化项目,共需要三步:

1. 创建protocol

protocol表示模块对外暴露的接口,需要继承BeeHive中的协议BHServiceProtocol。

2. 创建impClass

impClass是protocol对应的响应类,它需要遵守这个protocol协议,它可以是模块中一个已经存在的业务类,也可以是这个模块的一个封装类。

如果模块对外暴露的方法全部来自于同一个业务类,则可以将这个业务类设置成impClass;

如果模块对外暴露的方法全部来自于多个不同的业务类,则需要给这个模块创建一个封装类,通过这个封装类来实现对模块的调用,impClass指向这个封装类。

3. 设置protocol-impClass映射关系

在BeeHive中,所有protocol-impClass的映射关系都由BHServiceManager管理,在BHServiceManager类中,有一个叫做allServicesDict的属性,它保存了所有的protocol-impClass的映射关系。

allServicesDict是一个可变字典,其中key是protocol的字符串名称,value是impClass的字符串名称。

具体注册方式有下列三种

a. 使用BeeHive类的-[registerService:service:]

[[BeeHive shareInstance] registerService:@protocol(ModuleAServiceProtocol) service:[ModuleAService class]];

b. 使用宏BeeHiveService

@BeeHiveService(ModuleCServiceProtocol,ModuleCViewController)

c. 使用plist文件

[BHContext shareInstance].serviceConfigName = @"BeeHive.bundle/BHService";
调用具体实现类方法:
id<ModuleAServiceProtocol> moduleAService = [[BeeHive shareInstance] createService:@protocol(ModuleAServiceProtocol)];

二、事件分发

BeeHive本身会监听一些系统事件和应用事件,比如App生命周期、推送、handoff等,当事件发生时,BeeHive将其分发给各个模块,然后各个业务模块就可以在自己的Module类中调用各自的响应方法。

实现事件分发,共需要三步:

1、初始化Appdelegate需要继承BHAppdelegate

#import <UIKit/UIKit.h>
#import <BeeHive.h>

@interface AppDelegate : BHAppDelegate <UIApplicationDelegate>


@end
//AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    [BHContext shareInstance].application = application;
    [BHContext shareInstance].launchOptions = launchOptions;
    [BHContext shareInstance].moduleConfigName = @"BeeHive.bundle/BeeHive";
    [BHContext shareInstance].serviceConfigName = @"BeeHive.bundle/BHService";
    
    [BeeHive shareInstance].enableException = YES;
    [[BeeHive shareInstance] setContext:[BHContext shareInstance]];
    
    [super application:application didFinishLaunchingWithOptions:launchOptions];
    ...
    ...
    return YES;
}

2、创建并注册Module类

每一个需要响应事件的模块,都需要新建一个对应的Module类,Module类需要遵循BHModuleProtocol协议。然后注册ModuleAModule类。

#import "ModuleAModule.h"
#import "BHService.h"

@BeeHiveMod(ModuleAModule)
@interface ModuleAModule() <BHModuleProtocol>
@end

@implementation ModuleAModule

- (void)modContinueUserActivity:(BHContext *)context{
    
    //实现具体的事件处理
    
}

@end

注册方式如下:

//注册Module 方式一
@BeeHiveMod(ModuleAModule)

//注册Module 方式二
[BeeHive registerDynamicModule:[ModuleAModule class]];

3、调用响应方法

是在- (void)modContinueUserActivity:(BHContext *)context中进行的。

- (void)modContinueUserActivity:(BHContext *)context{
    //注册Module 方式二
//    [BeeHive registerDynamicModule:[ModuleAModule class]];
    
    NSUserActivity *userActivity = context.userActivityItem.userActivity;
    if ([userActivity.activityType isEqualToString:@"com.company.app.moduleA.one"]) {
    
        id<ModuleAServiceProtocol> moduleAService = [[BeeHive shareInstance] createService:@protocol(ModuleAServiceProtocol)];
        [moduleAService pushToModuleAOneViewController];
    }
}

三、实战应用

应用场景:ModuleA页面跳转ModuleAOne页面。跳转前先判断是否已登录,未登录跳转登录页面,登录后执行跳转ModuleAOne页面。已登录就直接跳转ModuleAOne页面。
LoginService
#import "LoginService.h"
#import "LoginViewController.h"

@BeeHiveService(LoginServiceProtocol,LoginService)
@implementation LoginService

-(void)loginIfNeedWithCompleteBlock:(void (^)(BOOL))completeBlock{
    BOOL hasLogined = NO;
    if (hasLogined) {
        completeBlock(YES);
        
    }else{
        
        UITabBarController *tab = (UITabBarController *)[UIApplication sharedApplication].delegate.window.rootViewController;
        UINavigationController *nav = tab.selectedViewController;
        
        LoginViewController *login = [LoginViewController new];
        login.completeBlock = completeBlock;
        [nav presentViewController:login animated:YES completion:nil];
    }
}

@end
ModuleAService
#import "ModuleAOneViewController.h"
#import "ModuleAViewController.h"
#import "ModuleAService.h"
#import "LoginService.h"

@implementation ModuleAService

- (UIViewController *)getModuleAMainViewController{
    return [ModuleAViewController new];
}

- (void )pushToModuleAOneViewController{
    
    id<LoginServiceProtocol> loginService = [[BeeHive shareInstance] createService:@protocol(LoginServiceProtocol)];
    
    [loginService loginIfNeedWithCompleteBlock:^(BOOL isLogined) {
        if (isLogined) {
            UITabBarController *tab = (UITabBarController *)[UIApplication sharedApplication].delegate.window.rootViewController;
            UINavigationController *nav = tab.selectedViewController;
            ModuleAOneViewController *one = [ModuleAOneViewController new];
            
            [nav pushViewController:one animated:YES];
        }
    }];
}

@end

代码:BeeHiveTestDemo

如果对你有帮助,请顺手点个star✨

相关文章

  • 阿里组件化框架BeeHive解析

    更好的阅读体验,请到个人博客阅读: 阿里组件化框架BeeHive解析 本文是基于BeeHive版本1.6.0进行...

  • BeeHive组件化框架

    前言: 最近公司要是有阿里的BeeHive组件化框架,下面是学习的心得体会,偏向于使用层面,仅供参考! 一、组件化...

  • iOS组件化 文章

    iOS组件化 BeeHive iOS应用架构谈 组件化方案 Small iOS BeeHive —— 一个优雅但还...

  • 组件化工具BeeHive(一):事件分发

    前言 BeeHive是阿里开源的一个组件化框架工具,其内部是使用Spring框架Service的理念来实现模块解耦...

  • BeeHive组件化

    理解关于Beehive的设计思想 Beehive的使用, 可以分3个核心的内容1.Service 服务2.Modu...

  • 组件化-BeeHive

    解耦 BeeHive的核心主要有两类对象,一类是Service对象,第二类是Module对象。Service解除依...

  • BeeHive 框架实现原理分析

    BeeHive是什么?BeeHive是阿里提出的在iOS平台上实现模块化编程的一套实现方案。模块化、组件化是目前在...

  • iOS组件化通用工具浅析

    目录 1. 组件化是什么 2. 组件化的作用 3. 组件化实现 4. 中间件通用工具 5. BeeHive和CTM...

  • BeeHive - iOS模块化之路

    1、为什么要使用BeeHive模块化 BeeHive是基于Java的Spring框架,一个分发App状态和统一Se...

  • BeeHive

    前言 BeeHive 是阿里用于iOS的 App 模块化编程的框架实现方案,吸收了 Spring 框架 Servi...

网友评论

      本文标题:BeeHive组件化框架

      本文链接:https://www.haomeiwen.com/subject/xlqscktx.html