簡介
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;
}
複製程式碼
總結
歡迎 Star:github.com/carlSQ/AntN…
如有任何智慧財產權、版權問題或理論錯誤,還請指正。
轉載請註明原作者及以上資訊。