• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift通过协议实现AOP

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

什么是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的效果,达到彻底解耦?





鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap