网络模块优化方案(1)——封装网络框架
这篇文章是在去年写的,当时带领团队对旗下两款app进行了重构。由于业务需求较多,所以我们采用了两套方案同时进行:
1、业务模块:在功能迭代的同时进行重构,主要工作是代码优化、提取封装、依赖整理等。
2、基础模块:对于之前顽疾较多较重的模块进行完全重写,独立在业务之外,独立开发独立测试通过后再替换到主项目中。
其中网络模块就是重构的首要入手点,之前网络这块没有进行彻底封装,全部散落这各个activity和fragment中,后期维护扩展愈来愈困难。
所以为了实现模块化,减少模块耦合;减少重复代码,加快网络请求的开发。我们需要将网络框架进行二次封装,将业务层和网络框架进行隔离。如下图
具体做法:
(1)在网络请求进行发送(get/post)时进行封装统一处理。
这样就可以应付在所有的请求中添加同一参数、cookie、header等,或本地缓存等其他的统一处理的行为。
具体处理是将网络框架的post、get再封装一层方法,对外公开使用封装后的方法,这样就可以在封装方法层中做处理。
(2)在网络请求返回(回调)时进行统一处理后再以自定义接口回调
这样可以对所有请求返回进行统一处理,比如进行统一拦截、解析数据、处理公共数据等。并且可以在自定义的回调中添加url、请求参数等信息供业务处理。
具体处理是创建一个实例类实现网络框架自带的回调接口,所有的的网络请求都注册这个实例类回调。然后自定义一个网络回调接口,业务层发送请求时注册的是自定义的回调。最后在实例类的方法中进行统一处理后,再去调业务层注册的自定义回调。
示例代码: