跳转至

7:介绍Dog Patch

你已经学会了TDD的基础知识,你应该开始对它感到舒适。然而,你还没有学会如何为大多数应用程序的一个非常关键的部分做TDD:网络!

在接下来的几章里,你将学习以测试驱动的方式编写网络代码的来龙去脉。本章的目的是向你介绍本节的示例项目,并强调还有哪些工作需要完成。

开始

在本节中,您将完成一个名为Dog Patch的小狗领养应用程序。这个应用程序将爱狗人士与善良、专业的饲养员联系起来,以寻找他们梦想中的小狗。

让我们来看看为实现这一目标需要做什么。

网络客户端

在第8章,你将学习如何为RESTful网络启动TDD。你将首先探索启动项目,发现ListingsViewController总是显示错误:

img

这是因为应用程序实际上还没有进行任何联网!你将创建一个联网客户端,并发出GET请求,从远程服务器获取狗的模型,作为解决这个问题的第一步。你将创建一个网络客户端并发出GET请求,从远程服务器上获取Dog模型,作为解决这个问题的第一步。

使用网络客户端

在第9章中,你将遵循TDD,在视图控制器中使用你的网络客户端。最终,你的应用程序将能够向用户显示联网结果,除了图像:

img

具体来说,你将更新ListingsViewController以使用DogPatchClient,即你在上一章创建的网络客户端。

图像客户端

在第10章中,你将创建一个图像客户端,并更新ListingsViewController以使用它来显示图像:

img

了解Dog Patch的架构

你将使用Model-View-Controller-Networking(MVC-N)作为这个应用程序的架构。如果你以前在iOS中做过任何工作,你很可能熟悉模型-视图-控制器(MVC)架构,其中你把对象分成三种类型。当然,这些都被恰当地命名为模型、视图和控制器。

MVC-NMVC的一个衍生架构。然而,它不是只有三种类型,而是分离出第四种类型用于联网。

特别是对于像Dog Patch这样的网络重度应用,将网络分离到自己的类型中是有意义的。如果你不这样做,网络代码毕竟会去哪里呢?在纯粹的MVC架构的应用程序中,开发者倾向于将网络归入每个视图控制器。

这里的问题是,很多网络代码都是相互关联的。例如,URL和内容序列化、认证头等都需要完全相同的逻辑。如果网络代码直接在每个视图控制器中,你很快就会出现大量的重复。这很快就会变成一个无法管理的混乱局面。

幸运的是,MVC-N允许你完全避免这个问题,把你的网络代码放到一个网络客户端中。然后,这个客户端被传递到任何需要它的视图控制器中,这就有效地消除了视图控制器之间的重复。

如果你以前没有听说过MVC-N,那也没有关系。在接下来的几章中,你会了解到所有关于它的知识!

从这里开始,该往哪里走?

本章介绍了Dog Patch和你在接下来的几章中要做的事情。继续看下一章,深入学习代码!