美文网首页
从网络框架来谈AOP与插件化

从网络框架来谈AOP与插件化

作者: FingerStyle | 来源:发表于2020-06-03 00:17 被阅读0次

    在设计网络框架时,我们经常考虑到有很多业务逻辑需要夹杂在网络请求的创建和结果解析过程中,比如要针对某些特殊错误做统一toast,或者要监听网络请求的成功失败,并统计耗时这些。为了让代码优雅简洁,我们可以把非核心功能通过插件的形式分离出去。这种插件实质上是一种代理,即在请求发起前、收到结果后及发生错误时调用插件的对应方法,使插件能够针对不同请求和结果做相应的处理。这种思想也称为AOP。

    在iOS这个平台上,我们经常会用方法置换来实现插件化,这种方法是通过运行时动态改变函数的实现来做到的。具体做法可以参考aspect这个库。由于方法的替换是在运行时确定的,这种方式可以称为动态代理。另外一种实现方式就是通过类似NSURLProtocol这种网络协议的代理,给开发者提供了一个可以在网络请求的各个关键节点修改或获取请求数据的方式。这种代理可以有多个,且前一个代理的结果会影响后一个的请求,就像一个链条一样环环相扣。这种协议由于是在编译时就已经确定了,可以认为是静态代理。

    在JS的语法里面,也可以通过修改原型链来实现动态添加、修改函数的实现,但更推荐的做法是类似iOS NSURLProtocol这种做法,设计一套公共的回调函数,在关键节点通过回调函数通知到各个插件进行处理。

    无论是哪种方式,都要求我们在设计SDK或者公共模块时要考虑好关键步骤可能会有哪些变化,并把可变部分做成动态可配置的。这样可以在保持核心方法不增加逻辑的情况下,最大程度的给使用者提供便利。

    相关文章

      网友评论

          本文标题:从网络框架来谈AOP与插件化

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