一、基础协议库ProtocolManager定义各个模块Protocol
1.1XXProtocolManager内部实现
@interface XXProtocolManager : NSObject
/** 返回类对象*/
+ (id)serviceProvideClassMethodForProtocolName:(NSString *)protocolName;
/** 返回实例对象*/
+ (id)serviceProvideInstanceMethodForProtocolName:(NSString *)protocolName;
@end
@implementation XXProtocolManager
+ (id)serviceProvideClassMethodForProtocolName:(NSString *)protocolName {
if (!protocolName) return nil;
Class class = NSClassFromString(protocolName);
Protocol *protocol = NSProtocolFromString(protocolName);
if (class == nil || protocol == nil) {
return nil;
}
if ([class conformsToProtocol:protocol]) {
return class;
}
return nil;
}
+ (id)serviceProvideInstanceMethodForProtocolName:(NSString *)protocolName {
if (!protocolName) return nil;
Class class = NSClassFromString(protocolName);
Protocol *protocol = NSProtocolFromString(protocolName);
if (class == nil || protocol == nil) {
return nil;
}
if ([class conformsToProtocol:protocol]) {
return [[class alloc] init];
}
return nil;
}
@end
1.2XXUserModuleProtocol协议方法
/** 用户模块协议*/
@protocol XXUserModuleDelegate <NSObject>
/** 更新用户信息*/
- (void)updateUserInfo;
/** 登录*/
+ (void)onLogin;
/** 登出*/
+ (void)onLogout;
/** 获取用户数据*/
+ (id)getUserInfo;
/** 清空用户数据*/
+ (void)clearUserInfo;
@end
1.3XXOrderModuleProtocol协议方法
/** 订单模块协议*/
@protocol XXOrderModuleDelegate <NSObject>
/** 跳转订单详情*/
+ (void)gotoOrderDetail:(NSString *)orderId;
@end
1.4XXShoppingCartModuleProtocol协议方法
/** 购物车模块协议*/
@protocol XXShoppingCartModuleDelegate <NSObject>
/** 跳转到购物车*/
+ (void)gotoShoppingCart;
@end
二、业务层定义同名协议实现类
各个模块定义协议同名实现类
,XXUserModuleDelegate
、XXOrderModuleDelegate
、XXShoppingCartModuleDelegate
实际应该定义到各自模块私有库当中,以下图片是Demo效果
#import <Foundation/Foundation.h>
/** Demo效果*/
#import "XXUserModuleProtocol.h"
/** 实际导入头文件方式*/
#import <ProtocolManager/XXUserModuleProtocol.h>
NS_ASSUME_NONNULL_BEGIN
@interface XXUserModuleDelegate : NSObject <XXUserModuleDelegate>
@end
NS_ASSUME_NONNULL_END
#import "XXUserModuleDelegate.h"
@implementation XXUserModuleDelegate
/** 更新用户信息*/
- (void)updateUserInfo {
}
/** 登录*/
+ (void)onLogin {
}
/** 登出*/
+ (void)onLogout {
}
/** 获取用户数据*/
+ (id)getUserInfo {
return nil;
}
/** 清空用户数据*/
+ (void)clearUserInfo {
}
@end
三、模块间通信
首页模块与其他模块间通信
#import "XXHomeVC.h"
/** Demo效果*/
#import "XXProtocolManager.h"
#import "XXUserModuleProtocol.h"
#import "XXOrderModuleProtocol.h"
#import "XXShoppingCartModuleProtocol.h"
/** 实际导入头文件方式*/
#import <XXProtocolManager/XXProtocolManager.h>
#import <XXProtocolManager/XXUserModuleProtocol.h>
#import <XXProtocolManager/XXOrderModuleProtocol.h>
#import <XXProtocolManager/XXShoppingCartModuleProtocol.h>
@interface XXHomeVC ()
@end
@implementation XXHomeVC
- (void)viewDidLoad {
[super viewDidLoad];
self.title = @"ProtocolManager";
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
// 更新数据
id<XXUserModuleDelegate> userTest = [XXProtocolManager serviceProvideInstanceMethodForProtocolName:@"XXUserModuleDelegate"];
[userTest updateUserInfo];
// 登出
id<XXUserModuleDelegate> userProtocol = [XXProtocolManager serviceProvideForProtocolName:@"XXUserModuleDelegate"];
[userProtocol onLogout];
// 跳转订单详情
id<XXOrderModuleDelegate> orderProtocol = [XXProtocolManager serviceProvideForProtocolName:@"XXOrderModuleDelegate"];
[orderProtocol gotoOrderDetail:@"1001"];
// 跳转购物车
id<XXShoppingCartModuleDelegate> shoppingCartProtocol = [XXProtocolManager serviceProvideForProtocolName:@"XXShoppingCartModuleDelegate"];
[shoppingCartProtocol gotoShoppingCart];
}
@end
结语:这个方案只是一种方式,有不合理的地方,希望指出共同进步。因为需要维护一个协议库,所以每次更新协议里面方法时,最好在Podfile 使用本地path的方式(pod 'ProtocolManager', :path => '本地路径/ProtocolManager')引入基础协议库ProtocolManager
,这样调试完成后,提交到远端并merge代码,打tag。