我正在尝试找出设计某些东西的最佳方法。我正在编写一个 iPhone 应用程序,并且在大多数情况下,我正在使用对 Web 服务的异步调用。这意味着我可以设置一个 URLConnection,调用 start 并让它在数据可用或发生异常时给我回电。这很好用,我认为这是处理事情的正确方法。
例如:
我从 Web 服务请求人员列表。结果列表是 Xml Person 元素,它将由我的 XmlDelegate 转换为一个objective-c“Person”对象。
当我调用该函数来获取人员时,我传入了一个“PersonResultDelegate”,这是一个带有一个名为“PersonReceived:(Person *)p”的函数的协议。所以,每次我得到一个完整的 Person 对象时,我都会调用那个方法,一切都很好。因此,我的详细视图(或搜索结果视图)只接收可用的元素。
当我需要获得一个以上的特定对象时,问题就来了。在我的具体情况下,我需要为一个人安排第一次和最后一次约会。因此,我需要进行两次 API 调用来获取这两个单独的 Appointment 对象。每个 Appointment 对象都会调用已注册的 AppointmentResultDelegate,但我怎么知道哪个是第一个,哪个是最后一个呢?当没有“第一个”或“最后一个”约会并且代表永远不会被调用时,我还需要以某种方式处理这种情况。
处理这个问题的正确设计方法是什么?我是否应该在初始请求中添加一些额外的上下文信息,这些信息会传递回委托中的句柄?只对最初打电话的人有意义的不透明数据?我还有哪些其他选择?
解决方案
我实际上最终做的只是将一段不透明的数据与 Appointment 一起传递给委托。因此,当我请求约会对象时,我有一个方法,例如:
getNextAppointment withDelegate:self withContext:@"next"
getPrevAppointment withDelegate:self withContext:@"prev"
这样,当代表被叫到时,我就知道正在交付什么约会。