美文网首页iOSiOS DevelopmentiOS Developer
iOS 面向切面编程(AOP)--typhoon框架

iOS 面向切面编程(AOP)--typhoon框架

作者: Miaoz0070 | 来源:发表于2017-02-22 18:18 被阅读958次
    typhoon配个台风图

    最近在看公司的项目,了解到了typhoon框架及面向切面编程思想,以往都是面向对象编程(OOP).

    首先先来了解下两个概念:

    OOP:

    面向对象编程是由单个能够起到子程序作用的单元或对象组合而成,将接口与实现分离的过程,每个对象都能够接收信息、处理数据和向其它对象发送信息。主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。

    面向切面编程(AOP):

    通过预编译方式和运行期动态代理实现程序功能的统一维护, 针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
    总的概括来说OOP实际上是对对象的属性和行为的封装,而AOP对于这点就无从谈起,但是AOP是处理某个步骤和阶段的,从中进行切面的提取,也就是说,如果几个或更多个逻辑过程中,有重复的操作行为,AOP就可以提取出来,运用动态代理,实现程序功能的统一维护。两者在一起使用扬长补短最好不过了。

    typhoon框架介绍

    typhoon 是iOS 依赖注入框架,依赖注入就是你需要使用一个对象,你不需要自己去创建这个对象,而是通过系统的ioc容器为你创建一个,并交付给你。 通过ioc容器实现依赖注入,我们可以减少模块和模块,组件和组件之间的耦合,提高代码的可维护性。你只要引用一个对象,不再创建init,直接使用
    typhoon框架地址

    typhoon框架使用

    ** 一、导入typhoon框架**

      import “TyphoonAssembly.h”
    

    二.创建class继承TyphoonAssembly
    三.注入一个对象(OTPCoderRequestDTO)

    -(OTPCoderRequestDTO *)sendOTPCoderDTO:(NSString *)phone{
        return [TyphoonDefinition withClass:[OTPCoderRequestDTO class] configuration:^(TyphoonDefinition *definition) {
            [definition injectMethod:@selector(generateParamWithPhoneStr:withType:) parameters:^(TyphoonMethod *method) {
                [method injectParameter:phoneStr];
                [method injectParameter:[NSNumber numberWithInt:OTPCodeType_reg]];
            }];
        }];
    }
    
    

    **四、需要在info.plist文件中创建一个nsarray,名字为TyphoonInitialAssemblies,在里面添加你实现了TyphoonAssembly 协议的类名。 **

    typhoon Interface Methods

    1.类方法注入

    - (UIWindow *)mainWindow
    {
        return [TyphoonDefinition withClass:[UIWindow class] configuration:^(TyphoonDefinition *definition)
                {
                    [definition useInitializer:@selector(initWithFrame:) parameters:^(TyphoonMethod *initializer)
                     {
                         [initializer injectParameterWith:[NSValue valueWithCGRect:[[UIScreen mainScreen] bounds]]];
                     }];
                    [definition injectProperty:@selector(rootViewController) with:[self navViewController]];
                }];
    }
    

    2.属性注入

      [definition injectProperty:@selector(requestDTO) with:requestDTO];
    

    3.普通方法注入

     [definition injectMethod:@selector(generateParamWithPhone:) parameters:^(TyphoonMethod *method) {
                [method injectParameterWith:phone];
            }];
    

    4.如果你需要在注入一个对象之前或之后做一些操作

    //之后
    [definition performAfterInjections:@selector(generateParamWithString:)  parameters:parameters:^(TyphoonMethod *method) {
                [method injectParameterWith:string];
            }];
    //之前
    [definition performBeforeInjections:@selector(generateParamWithString:)  parameters:parameters:^(TyphoonMethod *method) {
                [method injectParameterWith:string];
            }];
    

    5.注入集合

     [definition injectProperty:@selector(dataArray) with:@[@“1”,@“2”]];
    

    以上基本就是typhoon框架的使用方法了。
    下边是typhoon框架地址https://github.com/appsquickly/Typhoon

    相关文章

      网友评论

        本文标题:iOS 面向切面编程(AOP)--typhoon框架

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