问题:公司目前有一个需求,模块A需要功能M,接口使用模块A的接口。模块B需要功能M,接口使用模块B的接口。
思考:不同的模块使用相同的功能,调用不同的接口,
这里跳转的界面展示和功能是一样的,就是最后上传不一样,
使用协议的思路来处理。
代码:
1>定义一个协议 DHPDFTmplModuleProtocol
里面有接口上传需要的一些数据
/// 上传 操作(签字、签字。。。)
/// @param viewController
/// @param arrMarkItems 相关操作
/// @param successHandler 成功回调
/// @param failureHandler 失败回调
- (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
arrMarkItems:(NSMutableArray *)arrMarkItems
successHandler:(void (^)(BOOL afterSuccessClose))successHandler
failureHandler:(void (^)(void))failureHandler;
2>定义一个控制器 DHPDFTmplController
里面定义好需要使用上面使用的协议
+ (instancetype)PDFTmplControllerWithModel:(ModelPDFDrawingFile *)drawingFile
handler:(id)handler
ignoreFileCache:(BOOL)ignoreFileCache;
3>实现协议
模块A ,定义协议DHPDFTmpSGBYHandler
@interface DHPDFTmpSGBYHandler : NSObject
+ (instancetype)PDFTmpSGBYHandlerWithTaskMimeId:(NSString *)task_mime_id
function:(PDFDrawingFunction)function;
@end
.m中会实现方法
- (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
arrMarkItems:(NSMutableArray *)arrMarkItems
successHandler:(void (^)(BOOL afterSuccessClose))successHandler
failureHandler:(void (^)(void))failureHandler
模块B ,定义协议DHPDFTmpQQGZHandler
@interface DHPDFTmpQQGZHandler : NSObject
+ (instancetype)PDFTmpSGBYHandlerWithTaskMimeId:(NSString *)task_mime_id
function:(PDFDrawingFunction)function;
@end
.m中会实现方法
- (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
arrMarkItems:(NSMutableArray *)arrMarkItems
successHandler:(void (^)(BOOL afterSuccessClose))successHandler
failureHandler:(void (^)(void))failureHandler
4>使用
模块A中 使用
DHPDFTmpSGBYHandler *hander = [DHPDFTmpSGBYHandler PDFTmpSGBYHandlerWithTaskMimeId:temModel.task_mime_id function:functions];
DHPDFTmplController *controller = [DHPDFTmplController PDFTmplControllerWithModel:temModel.getPdfFileModel handler:hander ignoreFileCache:YES];
模块B中 使用
DHPDFTmpQQGZHandler *hander = [DHPDFTmpQQGZHandler DHPDFTmpQQGZHandlerWithTaskMimeId:file.task_mime_id function:functions];
DHPDFTmplController *controller = [DHPDFTmplController PDFTmplControllerWithModel:model.getPdfFileModel handler:hander ignoreFileCache:YES];
5.最后成型的代码
简洁 干净 便于维护
这样在各自模块中就可实现相同的方法,调用不同的请求接口
当然也可以使用type值区分,只不过type值是在一个控制器中,不方便维护
这个更简洁 更便于维护