如何使大班更加优雅?

时间:2019-05-24 11:27:01

标签: ios objective-c class design-patterns

在我的Objective-C应用程序中,一些视图控制器具有数十个IBOutlet和40多种方法。阅读代码变得非常困难。我试图通过在单独的控制器类中声明属性和方法来限制它们的数量。

是否有一些好的做法来限制一个类中的代码量,或者我必须接受它,因为我的类有很多任务要控制?

3 个答案:

答案 0 :(得分:1)

我认为您最终获得了称为Massive View Controllers的东西。

请查看下面的链接。

https://talk.objc.io/collections/refactoring-large-view-controllers

有更多的方法可以缓解该问题。如果我说得对,您可能正在关注MVC。如果是这样,您应该考虑遵循MVP / MVVM / VIPER架构。

答案 1 :(得分:1)

通常在iOS应用程序编程中,视图控制器会变大,因为它执行应属于其他层的任务。这些层是:

  1. MVC中的C: view 控制器实际上不是MVC中的C。 MVC中的C不会直接保留对视图对象(标签,按钮等)的引用。而是,它公开了接收从视图对象或从任何地方(包括视图控制器)发送的请求的方法。 C的代码未提及UI类。它的任务是将“原始”请求转换为内层可以理解的内容,然后传递给内层,即
  2. 业务逻辑层(MVC中的M):该层中的代码绝对不能对UI一无所知。

举个简单的例子:如果您的业务逻辑是要计算两个整数的和,并且您的UI有两个文本框,那么C的任务就是将两个字符串转换为两个整数。在此示例中,视图控制器仅是一个管理器,其中包含对两个文本框的引用。它知道如何直接操作这些文本框,如何从这些文本框接收事件以及如何调用(实际)控制器。

总而言之,要解决您的问题,只需将视图控制器中的一些代码提取到上面的层中即可。

答案 2 :(得分:1)

显然,在MVC中,'C'ontroller要做的事情很多,例如处理视图的生命周期事件,处理IBActions中的视图回调以及类似的其他任务。如果我们正在处理来自'M'odel的数据,那么在Controller中也是如此。对于前将Date对象转换为String并显示为'V'iew或处理后显示一些计数。

不负责管理视图并处理数据的代码可以移到其他类。这种全新的设计模式称为MVVM-模型-视图-视图模型。 ViewModels将具有与数据处理相关的方法。我想这将有助于Viewcontrollers从处理这么多事情中减轻一些负担,并在代码上缩小一些。

如果您想对MVVM设计模式有更多的了解,请通过以下链接:

https://www.raywenderlich.com/34-design-patterns-by-tutorials-mvvm

希望这对您有所帮助。