轻松构建URLRequest
在本文中,我将向您展示一种简单的方法,以简化开发人员在应用程序的开发过程中必须执行的最长且最无聊的任务之一。
如今,大多数应用程序都需要某种类型的网络。 在iOS中,这意味着我们必须在某个时候与URLRequest类作斗争。 如果我们不小心的话,这并不总是那么容易,并且可能导致各种各样的错误和问题。
首先,为了更好地理解示例,我们需要了解以下定义:
想象一下,我们有一个执行网络请求的APIClient 。 此类具有构建URLRequests的方法。 我们的代码可能是这样的:
如您所见,此方法很长,并且有多个责任。 因此,我们增加了测试的复杂性,并且不符合SRP原则。
是时候到建造者了
使用Builder模式是一个完美的方案:
Builder是一种创新的设计模式,可让您逐步构造复杂的对象。 该模式使您可以使用相同的构造代码生成对象的不同类型和表示形式。
尽管我认为很清楚,但是基本上这种模式可以帮助我们以更简单的方式构建复杂的对象。
该模式将对象构造组织为一组步骤。 要创建对象,请在构建器对象上执行一系列这些步骤。 重要的部分是您不需要调用所有步骤。 您只能调用产生对象的特定配置所必需的那些步骤。
现在,我们知道了模式的定义,因此我们将创建URLRequestBuilder :
每个方法的顶部都有一个关键字disableableResult,以避免警告未使用的结果。
此类具有创建URLRequest所需的所有属性,其中一些是可选的,而其他则是必需的。 然后定义步骤,每个set方法就像创建对象所需的步骤。
最后,我们有一个编译方法,该方法收集所有信息并生成最终对象。
多亏了Swift,我们可以使用方法链接,所以方法看起来像这样:
结果是一种更具可读性的方法,仅需5行代码,并且只需承担一项责任。 因此,我们已将请求创建与APIClient隔离开了。
奖金
很多时候,在发送请求之前,我们必须进行一项或多项更改才能满足API的要求。 例如,如果我们使用OAuth2对请求进行身份验证。
使用Alamofire的 方法,我们可以创建一个RequestAdapter 。 其目标是接收请求,进行必要的更改,然后再次返回。
RequestAdapter将是:
使用OAuth2示例,他的适配器如下所示:
要将这个新元素包括在我们的构建器中,我们只需要添加带有所有必要适配器的新属性,并在编译方法中添加逻辑即可:
结论
也许看到了我们添加到项目中的所有代码,我们认为我们增加了复杂性,但这不是事实。 在最初的示例中,我们的APIClient负责创建请求,这是不正确的,因为唯一要做的就是发送请求。 因此,我们将打破SRP原则。
另外,现在我们的代码更具可扩展性,可读性和可测试性。 在实际的项目中,API的规范会不断变化,因此我们必须修改请求的创建。 使用我们的代码,我们只需要修改构建器,而不必修改结构的任何其他元素。
最后,我们了解了Builder模式的工作方式。 我可以告诉您,您很有可能最终会在应用程序的其他部分中使用它。 例如,通常在寄存器中使用一个以上的步骤就可以使用它。
- iOS应用程序启动黑屏,UINavigationController,Nib,RootViewController
- 如何在没有app store的情况下分发我已完成的应用
- IOS中的Facebooklogin在模拟器上工作,但不能在安装了本地应用程序的设备上工作
- 它可能从其他ViewController类更改UILabel的字体
- UITextField – 只允许数字和标点符号input/键盘
- Realm – 将具有初始数据的文件添加到项目(iOS / Swift)
- 在UISearchController的search栏上隐藏取消button
- 检测低电量警告ios
- 我们可以在Today- Widget-Extension中共享App类吗?