美文网首页
iOS 不同的模块,使用相同的功能,调用不同的接口

iOS 不同的模块,使用相同的功能,调用不同的接口

作者: money_ac9e | 来源:发表于2021-03-02 14:34 被阅读0次

    问题:公司目前有一个需求,模块A需要功能M,接口使用模块A的接口。模块B需要功能M,接口使用模块B的接口。

    思考:不同的模块使用相同的功能,调用不同的接口,
    这里跳转的界面展示和功能是一样的,就是最后上传不一样,
    使用协议的思路来处理。

    代码:
    1>定义一个协议 DHPDFTmplModuleProtocol
    里面有接口上传需要的一些数据

    /// 上传 操作(签字、签字。。。)
    /// @param viewController
    /// @param arrMarkItems 相关操作
    /// @param successHandler 成功回调
    /// @param failureHandler 失败回调
    - (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
                                            arrMarkItems:(NSMutableArray<ModelPDFDrawingFileMark *> *)arrMarkItems
                                          successHandler:(void (^)(BOOL afterSuccessClose))successHandler
                                          failureHandler:(void (^)(void))failureHandler;
    
    

    2>定义一个控制器 DHPDFTmplController
    里面定义好需要使用上面使用的协议

    + (instancetype)PDFTmplControllerWithModel:(ModelPDFDrawingFile *)drawingFile
                                       handler:(id<DHPDFTmplModuleProtocol>)handler
                               ignoreFileCache:(BOOL)ignoreFileCache;
    

    3>实现协议
    模块A ,定义协议DHPDFTmpSGBYHandler

    @interface DHPDFTmpSGBYHandler : NSObject<DHPDFTmplModuleProtocol>
    
    + (instancetype)PDFTmpSGBYHandlerWithTaskMimeId:(NSString *)task_mime_id
                                           function:(PDFDrawingFunction)function;
    
    @end
    

    .m中会实现方法

    - (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
                                            arrMarkItems:(NSMutableArray<ModelPDFDrawingFileMark *> *)arrMarkItems
                                          successHandler:(void (^)(BOOL afterSuccessClose))successHandler
                                          failureHandler:(void (^)(void))failureHandler
    

    模块B ,定义协议DHPDFTmpQQGZHandler

    @interface DHPDFTmpQQGZHandler : NSObject<DHPDFTmplModuleProtocol>
    
    + (instancetype)PDFTmpSGBYHandlerWithTaskMimeId:(NSString *)task_mime_id
                                           function:(PDFDrawingFunction)function;
    
    @end
    

    .m中会实现方法

    - (void)uploadSignPdfTemplateItemsWithViewController:(UIViewController *)viewController
                                            arrMarkItems:(NSMutableArray<ModelPDFDrawingFileMark *> *)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.最后成型的代码
    简洁 干净 便于维护


    image.png

    这样在各自模块中就可实现相同的方法,调用不同的请求接口
    当然也可以使用type值区分,只不过type值是在一个控制器中,不方便维护
    这个更简洁 更便于维护

    相关文章

      网友评论

          本文标题:iOS 不同的模块,使用相同的功能,调用不同的接口

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