AntNest

AntNest是吸收了Go语言的Interface模型的iOS的App模块化解耦编程的框架


Keywords
antnest, go, interface, ios, module, plugin, protocol
License
MIT
Install
pod try AntNest

Documentation

AntNest

CI Status Version License Platform

简介

AntNest 是吸收了 Go 语言的 Interface 模型的 iOS 的 App 模块化解耦编程的框架。

  • 完全解耦的面向接口插件化模块开发运行框架
  • 模块具体实现与接口调用分离
  • 易扩展的模块生命周期、事件分发

设计原则

  • Go 语言的 Interface 模型
  • 蚁巢的蚁室蚁道模型

基本架构

  • antRoom 为单独的模块
  • antChannel 为 antRoom 之间的通信通道

模块的生命周期

目前支持的模块的生命周期时间:

  • 基本的系统事件
  • 易扩展事件分发系统

基本的系统事件

目前的支持的基本的系统事件:

  • applicationDidEnterBackground
  • applicationWillEnterForeground
  • applicationDidFinishLaunchingWithOptions
  • applicationDidBecomeActive
  • applicationWillResignActive
  • applicationDidReceiveMemoryWarning
  • applicationWillTerminate
  • applicationSignificantTimeChange

在子模块中实现对应的方法,AntNest 就会自动的分发到对应的模块。

@implementation ANOrderAntRoom

ANT_EXPORT_ANTROOM()

+ (AntRoomLevel)antRoomLevel {
  return 1;
}

+ (instancetype)createInstance:(NSDictionary *)launchOptions {
  return [ANOrderAntRoom new];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  NSLog(@"ANOrderAntRoom room");
  return YES;
}

@end

扩展事件分发系统

AntNest 扩展事件分发是很方便的,举个简单的列子分发推送事件(AntNest 已经这个事件接口)

  • 定义事件接口
@protocol ANRemotePushEvent <NSObject>

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler ;

@end
  • 定义 AntNest 扩展实现接口,不用去实现具体的方法
@interface AntNest (ANRemotePushEvent)<ANRemotePushEvent>

@end


@implementation AntNest (ANRemotePushEvent)

@end
  • 触发事件
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
  [[AntNest sharedAntNest] application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
}

模块

模块注册

ANT_EXPORT_ANTROOM()

模块创建

实现 AntRoomProtocol 协议

antRoomLevel 表示模块的初始化优先级

+ (AntRoomLevel)antRoomLevel {
  return 1;
}

+ (instancetype)createInstance:(NSDictionary *)launchOptions {
  return [ANOrderAntRoom new];
}

模块通讯

模块间的通讯是通过 AntChannel 进行通讯,里面传递的都是实现 AntProtocol 协议对象。

假如我们要获取一个服务支持如下功能

  @property(nonatomic, strong) NSString *orderID;

  @property(nonatomic, strong) NSString *customerName;

  @property(nonatomic, strong) NSString *shopName;

  - (void)payOrder;

自定义一个 Protocol 获取服务实例

  @protocol ANOrderDetailProtocol<AntProtocol>

  @property(nonatomic, strong) NSString *orderID;

  @property(nonatomic, strong) NSString *customerName;

  @property(nonatomic, strong) NSString *shopName;

  - (void)payOrder;

@end

...

id<ANOrderDetailProtocol> orderDetail = ANT_CHANNEL(ANOrderDetailProtocol, [[ANAntDes alloc] initWith:@"ANOrderDetailAnt"])

ant service 注册

AntChannel 中传递的都是 ant service,

ANT_EXPORT_ANT()

+ (AntType)antType {
  return @"OrderDetailAnt";
}

+ (instancetype)createInstance:(id<ANOrderDetailDescriptionProtocol>)antDescription {
  ANOrderDetailViewController *order =  [ANOrderDetailViewController new];
  order.title = antDescription.orderID;
  order.customerName = antDescription.customerName;
  order.shopName = antDescription.shopName;
  return order;
}

Requirements

  • XCode

Installation

AntNest is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "AntNest"

Author

qiang.shen@ele.me

License

AntNest is available under the MIT license. See the LICENSE file for more info.