【问题标题】:Maintaining Single Responsibility Principle (SRP) with UIViewControllers使用 UIViewController 维护单一职责原则 (SRP)
【发布时间】:2011-05-07 03:37:44
【问题描述】:

遵循 Apple 的指导方针,我为 iPhone 应用程序的每个屏幕创建了一个 UIViewController 子类。然而,我一直发现这些类变得非常大,无论是纯粹的代码行数还是成员变量的数量。

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

这不仅违反了单一职责原则,而且还导致大量代码几乎不可能进行单元测试。

您倾向于将哪些职责/关注点划分为新的类别?在 UIViewController 子类的情况下,您认为哪些职责适合进行干净分离?

【问题讨论】:

    标签: iphone uiviewcontroller single-responsibility-principle


    【解决方案1】:

    这是一个有趣的问题,我也在纠结如何正确划分责任。这一切都取决于上下文,但由于测试 UIVieController 的子类可能会很痛苦,我尝试尽可能多地移动到模型类中。本着Skinny Controller, Fat Model的精神。

    当涉及到表格时,我创建了一个基本模型类来处理所有表格视图的内容,基本上封装了您在创建新的基于导航的核心数据项目时获得的内容。在控制器中,我只是将调用转发到我的表模型。

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

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

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

    这样我可以对特定数据项获得适当的控制器进行单元测试,而无需涉及父控制器。

    【讨论】:

      【解决方案2】:

      我正在创建类别、抽象父级并使用我在 Java 世界中学到的各种模式来降低复杂性和代码重复。但归根结底,每个屏幕我仍然有一个视图控制器,因为每个屏幕上至少有一件东西在某种程度上是独一无二的。多亏了我在控制器周围放置的基础设施,控制器中可能没有多少代码了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多