坚持Apple的指南,我每个iPhone应用程序的屏幕创建了一个UiviewController的子类。但是,我一直发现这些类都非常大,无论是在纯粹的代码和成员变量的数量方面。

根据定义,它们最终负责许多不同的问题(例如,观点生命周期,观点和模型之间的调解,有时触摸处理,控制逻辑,管理警报和其他UI状态)。

这不仅违反了单一责任原则,而且还会导致大量代码,几乎无法进行单位测试。

您倾向于将哪些责任/担忧分为新课程?在UiviewController子类的情况下,您认为哪些责任成为清洁分离的好候选者?

有帮助吗?

解决方案

这是一个有趣的问题,我也为如何正确分开责任而努力。这完全取决于上下文,但是由于对uiviecontroller的测试子类测试可能是一种痛苦,所以我试图尽可能多地进入模型类。 in 瘦控制器,脂肪模型.

说到桌子,我创建了一个基本模型类,用于处理所有表视图的内容,基本上封装了创建新的基于导航的核心数据项目时获得的收益。在控制器中,我只是将呼叫转发到我的表模型。

我正在尝试使控制器的方法尽可能小。根据上下文,我可能有几个模型类,每个类别负责特定部分。

我还研究了使用控制器工厂为某些数据模型获取细节控制器的可能性。

UIViewController *detailController = [self.controllerFactory controllerForItem:item];
[self presentModalViewController:detailController animated:YES];

这样,我可以单元测试,以便在不必涉及父控制器的情况下获得特定数据项的适当控制器。

其他提示

有了我的,我正在创建类别,抽象的父母,并使用我在Java世界中学到的各种模式来减少复杂性和代码重复。但是,当涉及到它时,我每个屏幕仍然有一个视图控制器,因为每个屏幕上至少都有一件事,这在某种程度上是唯一的。由于我在周围放置的基础架构,控制器中可能没有太多代码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top