一个封装AFNetworking的网络请求Demo
-
AFWSApiInvoker
主要负责调用AFN做网络请求以及返回错误信息和请求结果
-
ApiInvoker
所有api请求类的父类,用于填充请求相关信息以及统一接口
-
ApiRequest
网络请求实例 包含请求的所有信息
-
ApiResponse
服务器回应实例
-
WSApi
单例 继成ApiInvoker,负责提供请求相关接口
-
WSDevApi
分类api,继承WSApi,负责提供分类里的请求接口
- 交付什么样的数据给业务层?
我见过非常多的App的网络层在拿到JSON数据之后,会将数据转变成对应的对象原型。注意,我这里指的不是NSDictionary,而是类似Item这样的对象。这种做法是能够提高后续操作代码的可读性的。在比较直觉的思路里面,是需要这部分转化过程的,但这部分转化过程的成本是很大的,主要成本在于:
1.数组内容的转化成本较高:数组里面每项都要转化成Item对象,如果Item对象中还有类似数组,就很头疼。
2.转化之后的数据在大部分情况是不能直接被展示的,为了能够被展示,还需要第二次转化。
3.只有在API返回的数据高度标准化时,这些对象原型(Item)的可复用程度才高,否则容易出现类型爆炸,提高维护成本。
4.调试时通过对象原型查看数据内容不如直接通过NSDictionary/NSArray直观。
5.同一API的数据被不同View展示时,难以控制数据转化的代码,它们有可能会散落在任何需要的地方。
其实我们的理想情况是希望API的数据下发之后就能够直接被View所展示。首先要说的是,这种情况非常少。另外,这种做法使得View和API联系紧密,也是我们不希望发生的。
有问题,欢迎提issue,或者微博探讨