Swift通过协议实现AOP

什么是AOP

AOP是OOP的延续,是(Aspect Oriented Programming)的缩写,意思是面向切面编程,是目前软件开发中的一个热点。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。


  主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等。

  主要的意图是:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改 变这些行为的时候不影响业务逻辑的代码。

  可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

假设把应用程序想成一个立体结构的话,OOP的利刃是纵向切入系统,把系统划分为很多个模块(如:用户模块,文章模块等等),而AOP的利刃是横向切入系统,提取各个模块可能都要重复操作的部分(如:权限检查,日志记录等等)。由此可见,AOP是OOP的一个有效补充。

注意:AOP不是一种技术,实际上是编程思想。凡是符合AOP思想的技术,都可以看成是AOP的实现



iOS中的AOP

iOS开发中,已经有OC的runtime可以很好地实现AOP的功能,如Rumtime的Method Swizzling,轻量级的Aspects等等。

可以有效的降低代码耦合,使功能和业务分离,或者多条业务线分离。也可以做一些log日志的功能。还有常见的埋点功能和异常处理更能等等。


使用Swift写AOP

但是这些都是基于OC这么动态语言的特性去完成,最近想用Swift写,想写的更加Swift一些,于是决定只是用标准库去完成。

Swift作为一门很好的面向协议的语言,就要好好利用协议,下面请看代码,然后做代码做分析


1.为什么协议写在extension中?

因为,写在extension中,我们就可以在协议的extension中去实现需要的方法,这样就不用强制去遵循该协议的对象中实现,是个不错的解耦方式


2.为什么针对对象写extension?

因为,没用使用runtime,也没有继承NSObject,所以无法使用任何runtime的方法和KVC,KVO等特性,因此,这里的设计就是通过闭包去实现,而在使用时,就像defer关键字一样使用


最终看到控制台打印出来的结果,实现了面向切面的基本需求,对方法的开始,执行和结束都能监听。


思考:在这段代码中,还是可以看到,需要调用方法。那么如何使用Swift的标准库,达到Method Swizzling的效果,达到彻底解耦?




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值