拥有大量代码的ViewControllers是正确的吗?

时间:2011-12-09 10:21:38

标签: iphone objective-c ios cocoa-touch design-patterns

我对Cocoa和Objective-C(<1年)仍然很陌生。我的应用程序现在有50多个类,但是一些ViewControllers的代码非常拥挤,比如700行或更多。

我的问题是:拥有一个“大型”ViewController或者是否存在将代码拆分为分数的模式是否合适?很多代码都在实现委托方法,这就是为什么我不知道如何将其移走。

我知道,我可以用pragma标记进行结构化。

感谢您的任何意见。

EDIT(2013年12月):有关此主题的great article from Chris Eidhof objc.io。他还在Macoun 2013 / Frankfurt上谈到了这个话题。分离出UITableView协议是一个很好的模式。

EDIT2 NSScreencast上还有2个视频,解释了重构ViewController的概念(第102集和第103集)。

5 个答案:

答案 0 :(得分:6)

我见过的大视图控制器最常见的原因之一是MVC架构中没有模型和控制器的分离。换句话说,您是否在视图控制器中处理数据?

如果是,请从VC中删除模型组件并将其放入单独的类中。这也会迫使你想要更好的设计。

供参考,在视图控制器中:

  • 处理UIView中的所有更改以及其中包含的UI元素。
  • 所有动画,过渡和CALayer操作。

在模特:

  • 所有数据处理,包括分类,转换,存储等。

答案 1 :(得分:4)

恕我直言,对于iOS代码而言,700行还不是很大,我看到并处理得更糟。当然,如果您的所有风险投资都很大,那么您就会遇到问题。

你绝对应该使用和滥用#pragma mark,至少在Xcode下非常有用非常

然后,如果您发现在一个文件中有太多代码,则可以将功能提取到类或类别,以便更好地适应。

从长远来看,创建类可以非常有益,可以管理项目中的重复任务(即连接到webservice,解析XML / JSON,与SQLlite交互,记录等等)。如果你正在进行经常性的iOS编程,你可以用这种方式创建一个有用的代码的“通用”库。

创建类别,尤其是UIViewController上的类别,可以帮助减少占用大量空间的样板代码。您可以(也可能应该)为您的应用创建一个公共基础UIViewController,它将在代码的集中部分处理诸如轮换,可能是日志记录,导航等内容。

答案 2 :(得分:3)

您应该尝试确定您的ViewController实际上在做什么。

如果您可以分开一些问题,可以将它们移到自己的课程中。找出viewControllers方法使用的属性和ivars。如果您可以找到使用ivars / properties的公共子集的函数子集,则这些函数很可能会成为他们自己的类。然后控制器将拥有这样一个新类并将工作委托给它。

如果您的ViewController正在管理某种状态,例如。你在2个或更多方法中找到相同的switch语句或if-chain,STATE模式可以使你的VC更具可读性。但基本上你可以使用任何有助于降低风险投资责任的模式。

恕我直言,ViewController是您将模型连接到视图的地方。将模型更改传播到视图中并处理用户与视图的交互是唯一可以在那里发生的事情。所有其他职责,如计算,网络传输,解析,验证......都应该在VC使用的不同类中进行。

您可能会喜欢Robert C. Martin的书“清洁代码”。他深入探索了如何构建代码以提高其可读性和可重用性。

答案 3 :(得分:2)

答案 4 :(得分:0)

首选使用NSObject类来管理部分视图控制器功能。主要原因代码更清晰,更容易调试