iOS中一种网络层与业务层的设计方案

本文探讨了在iOS开发中分离网络层的必要性,通过对比不同情形,展示了如何使用XBBusinessManager来组织业务逻辑,降低控制器与网络层的耦合。XBBusinessManager内部详细处理网络请求,并通过代理方法通知结果,提高代码可维护性。
摘要由CSDN通过智能技术生成

iOS架构的必要性

提起iOS架构,免不了要谈到现在很火的MVVM和MVCS,但万变不离其宗,这两个概念其实也都基于MVC,它们的主要思想简而言之就是MVC中的C-controller里面的代码太多,在项目不断新增功能逐渐变大时,不利于开发也不利于维护.

为什么要把网络层独立出来

仅仅举例个人入行两年来所经历的实例.

情形一:

很早以前的代码可能是这样的:
情形一

情形二:

估计现在很多公司正在使用的代码:
情形二

情形二相对于情形一的区别就是在原始的第三方网络库(eg.AFNetworking)基础上做了一层封装,这样在一定程度上降低了第三方库和项目之间的耦合度.但这样控制器仍可算的上是直接和网络层在进行交互.

情形三:使用XBBusinessManager的代码:

情形三

参数说明

XBBusinessManager代表整个项目的业务层,控制器只需要根据业务类型传入业务对应的action及参数,网络请求成功服务器返回数据后便会通知`XBBusinessManagerDelegate“.

  • action: 现在项目开发中一般都会在pch中定义一个全局的HOST变量,代表服务器接口地址,例如一个get请求:”http://www.xxx.com/rank?page=1&pagesize=10“中,HOST可能会被定义为#define HOST @"http://www.xxx.com",那这个请求地址的action则就是/rank?.
  • requestType:枚举类型,代表常规的get和post两种请求方式.
  • params: 请求参数,字典类型.
  • ‘callbackDelegate’ : 请求结果需要通知的对象.
  • dataType:返回结果需要解析成的数据类型,如果需要解析为自定义的数据模型,请传入对应的模型class,否则传入nil将不做处理(由于目前使用AFNetworking,传入nil将返回NSDictionary或NSArray).
  • ‘identifier’ : 给某个请求设定一个单独的tag值,设定这个参数的原因是在某些情况下(比如列表上下拉刷新加载数据),可能这个接口的action值是固定的,变化的只是参数(page),这样的话只通过action字段便无法判断出请求出来的数据是用来刷新最新的还是用来加载更多的.为了不让使用者增加额外的逻辑来处理这些细节,可以通过设定identifier字段来为某个请求绑定一个特定标识.

XBBusinessManager的内部细节

‘XBBusinessManager’是业务层,而网络层则通过XBBaseHttpRequestHelper类实现,这个类才是具体负责跟第三方网络库打交道,具体实现请查看源码.

XBBusinessManager的使用

  1. 需要加入网络监控功能需在appDelegate中导入AppDelegate+XBNetworkingMonitor分类,在启动时调用startMonitor方法.
  2. 具体请求后获取数据需实现XBBusinessDelegate协议,协议内包含四个方法,分别表示获取数据成功,获取数据失败,网络断开,和使用蜂窝数据四种情况.之所以只使用delegate的方式,是因为曾经维护过的一个老项目中导出都是block调用,可追踪性太差,维护起来简直头大.单一的方式可以提供更好的可维护性.block确实使用十分方便,但滥用的后果也十分严重.个人也有一个简单的开源库使用了block,如果在该项目中使用delegate的话有兴趣的可以试试.代码地址戳这里XBSettingController.

最后的话

XBBusinessManager只是个人的一点小想法,写的比较简单,更多细节请查看源码,由于水平有限,期待与各位同仁就更多好的开发方式方法进行探讨.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值