将您的iOS应用程序网络层重构为模块

在每个项目上,总是需要改变核心服务。 这可能是由于不同的原因,对我们使用的库所做的更改,第三方/ Apple库上不推荐使用的方法,或者我们只是想迁移以开始使用新的库或API。
这种“小”变化可能会影响我们的开发速度,可能需要大量时间才能完成和/或可能会引入错误。

我们会做什么

在本文上,我们会将所有与网络相关的文件重构为一个模块。 然后,将网络服务和所有相关类迁移到动态库中,最后将使用URLSession更改为Alamofire

你需要知道的

要继续阅读本文,您需要熟悉以下内容:

  • Cocoapods(您可以在此处阅读有关Cocoapods的更多信息)
  • URLSession (很高兴知道)
  • AlamofireAlamofire知)

即使您不熟悉最后两个库,您仍然可以利用本文。

初始点

您可以从这里获得本课程的起点材料。

第一

打开.xworkspace (或.xproject ,此时不起作用)并运行( command + R )。
该应用程序非常简单; 它可以让您搜索艺术家并显示其所有专辑,仅此而已。 简单直接。

现在,我们已将应用程序设为初始状态,让我们开始向项目添加动态库。
单击项目导航器顶部的项目。
现在,在“目标”窗口中,单击左下方的加号(+)。

现在一直向下滚动,直到到达“框架和库”,选择“ Cocoa Touch Framework”,然后单击“下一步”。

现在输入名称(我叫我的NetworkService),然后单击“完成”。

创建框架后,您应该在“目标”窗口和“常规”选项卡的“链接的框架和库”上看到它。

第二

现在我们有了框架,让我们将与网络服务相关的所有类移到新创建的名为“网络服务”的文件夹中(或者您将其称为框架)

太好了,现在,如果您运行该应用程序,则会在视图控制器上注意到一些错误。

修复此错误非常简单,只需在视图控制器上import NetworkService 。 再次运行该应用程序,它应该可以正常运行。

太好了,我们只是模块化了我们的网络服务。

第三

现在,该项目正在使用URLSession处理所有网络调用。 随着项目的增加或时间的推移,由于Cocoa Touch API或第三方库的更改,很有可能需要重构,更改或改编代码。

现在,让我们重构网络管理员以使用Alamofire代替URLSession

我们需要做的第一件事是更新Podfile

我们将所有与网络相关的Pod分组在一个变量上,以确保仅在NetworkSevice目标上使用它们

我们定义了network_pods ,每个与网络服务相关的第三方库都应添加到此变量中(即AlamofireImageSocketIO等)。

然后,我们添加了新创建的NetworkService目标,并且仅将network_pods添加到该目标。 通过这样做,我们确保这些网络库仅在该目标中可访问。

现在,在终端上运行pod install ,完成后请确保使用的是.xcworkspace而不是.xcodeproj

进入.xcworkspace ,使用command + shift + O打开NetworkManager文件。
现在, import Alamofire并将import Alamofire替换为以下Alamofire方法。

现在使用command + R运行该应用程序,它应该像以前一样运行,应该像以前一样运行。

结论

应用程序代码的模块化是一种快速更改库或保持最新库的绝佳方法。 在与大型团队合作时也非常有用,因为开发人员可以在不影响其他开发人员的情况下处理模块。 我发现每个模块都有一个协议非常有用,它可以确保即使在模块上进行了重大的内部更改时,应用程序其他部分所使用的方法也保持不变。

您可以在此处找到最终项目。