iOS 面向切面编程(AOP)--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