2

我想在 iOS 中实现一个 Web 服务客户端,它使用 SOAP 和 XML 进行请求/响应。我的视图启动了初始业务逻辑(用户按下按钮或其他东西并启动一些称为 method_A 的业务方法)。

所以我有一个带有 method_A 的类,这个方法检查用户是否登录等,然后通过 SOAPConnector 类异步启动请求。所以 UI 不会被阻塞(异步)。SOAPConnector 类接受 XML 并处理请求。因此,我将 NSURLRequest 和 NSURLConnection 与 sendSynchronousRequest 一起使用。

响应被发送回接受响应的响应类。然后这个类想要解析响应 XML。因此,我使用了一个名为 XMLManager 的额外类,它使用 NSXMLParser 来解析 xml。但是这里我们需要一个委托来获取解析的 xml。再次在解析之后,我必须实现一个额外的方法来将解析的 xml 返回给发起请求的第一个类。

我真的想知道这是否是正确的方法。第一个问题是不阻塞 UI 的异步请求(第一个回调)。第二个问题是我被迫使用委托的解析(第二个回调)。这导致了很多类和方法,我怀疑这是正确的方法。这些类的唯一目的是管理委托和异步问题。所以我正在寻求任何建议并帮助解决这个问题。你知道一些很好的设计模式来解决这个问题吗?

4

1 回答 1

0

除了描述您选择的设计模式的方式存在一些不一致之外:

然后异步启动请求

对比

因此,我将 NSURLRequest 和 NSURLConnection 与 sendSynchronousRequest 一起使用。


也就是说,你的方法似乎是合理的。解决您发现的问题:

因此,我将 NSURLRequest 和 NSURLConnection 与 sendSynchronousRequest 一起使用。

这不就是使用异步 API 的目的吗?如果您NSURLConnection确实是异步操作,则应该涵盖该问题。

第二个问题是我被迫使用委托的解析

这种方法确实会产生更多的类、委托等,但它在测试方面符合最佳实践。如果您正在执行单元测试或其他测试策略(您不是吗?),那么除非您在功能上分解此过程,否则单独测试会更加困难。

如果您可以访问《Test-Drive iOS Development 》一书,这里有一个很好的部分介绍了使用 Web 服务的最佳实践,以实现可测试性。

于 2012-10-05T11:31:22.910 回答