Objective-C中的Mediator模式:用于执行计算等的Controller对象

时间:2012-07-20 17:23:15

标签: objective-c ios oop design-patterns

我的应用程序执行一些关于公司估值的相当复杂的计算。 它从多个来源获取原始数据(例如,来自作为csv数据存储的Web服务和作为xml数据的基础数据的共享价格)。

获取数据后,应用程序会解析数据,将其存储在Core Data中并执行计算。计算结果也存储在核心数据中。

我目前的方法是将计算作为类别添加到公司(托管)对象,并将csv和xml数据解析为添加到数据对象的类别(图中未显示)。与网络相关的代码在单独的单例对象中(如书中所示:iOS编程:The Big Nerd Ranch Guide,第3版)。

问题:

由于网络通信和计算是相互依赖的(即某些计算只能在收到特定数据包之后才开始)并且我想使用多线程,我在视图控制器中得到了相当多的代码。

我相信我应该使用一个协调器对象,遵循中介模式的想法,并从协调相关代码中释放我的视图控制器。

您对此有何看法?

  • 中介模式(协调者对象)是否是正确的方法 在你看来?
  • 您如何建议设置协调员 宾语?
  • 在网络上是否有关于此主题的任何好的教程或示例 在一本书?

谢谢!

1 个答案:

答案 0 :(得分:1)

iOS为此提供了两项出色的技术 - NSOperations和Grand Central Dispatch。我更习惯于将操作用于您所描述的内容,因为在操作之间创建连接非常容易,这样在某些事情完成之前就无法启动。 NSOperation队列与操作系统协同工作,以便为设备和当前资源管理线程数和一般负载。

github上有一个开源项目,“NSOperation-WebFetches-MadeEasy”,它有一个你在主类中实例化的中介对象(在本例中是你的viewController,但可以是任何类),你运行所有通过它进行操作,它会将您在mainThread上的消息发送给您班级中的一个方法。您可以在15分钟内完成此操作 - 您需要的课程是OperationsRunner,它会告诉您如何将其添加到.h文件中。您可以将此用于Web提取(并发NSOperations)和非并发操作。你现在甚至可以进行块操作。

阅读Apple的Concurrent Programming Guide

中的NSOperations和阻止