分离iOS MVC应用程序的关注点

时间:2012-03-22 17:59:55

标签: iphone ios design-patterns cocoa-design-patterns

我对如何在良好的MVC模式设计方面遵循Apple的标准特别感兴趣。让我用一个例子说明我的问题。

假设我在屏幕上有许多相当复杂的UI元素,例如UITableView。基本上这些元素需要数据源和委托来处理交互。

有两种方法可以解决这个问题。

我可以使用相同的UITableViewController子类来处理所有元素,并根据请求UITableView动态处理事物。

第二种方法是使用“轻量级”控制器来管理每个单独的视图。在iOS 4.x中,您不允许拥有多个UIViewControllers,因此这些控制器将更多地用于管理状态和交互。

我不喜欢第一种方法,因为它不能扩展,似乎可以结合使用。如果我有多个不同类型的复杂对象怎么办?

第二种方法似乎更好。对象被更好地封装 - 关注点的分离。唯一的缺点似乎是通信的复杂性增加。轻量级控制器必须委托回真实的视图控制器,或者他们必须有一个处理某些东西以执行实际操作。

您对这两种方法的体验是什么?有没有更好的解决方案来分解复杂的界面?

由于

1 个答案:

答案 0 :(得分:1)

您始终可以将UITableView的委托和数据源重新分配给其他内容。它不必是UITableViewController。只要它满足委托和数据源的协议方法之一。

所以你可能有一个由nib / xib(Interface Builder创建的视图)驱动的UIViewController(控制器)。在该界面中,您添加了一个tableview,并将其委托和数据源设置为文件所有者(返回控制器)。

然后UIViewController可以与Core Data(模型)通信以检索相关对象以响应UITableView委托消息。

或者,UIViewController可以将委托/数据源重新分配给轻量级提供程序,该提供程序可以完成协议以使其更加封装。

这是Apple提出的MVC风格。