Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何让大班更优雅?_Ios_Objective C_Class_Design Patterns - Fatal编程技术网

Ios 如何让大班更优雅?

Ios 如何让大班更优雅?,ios,objective-c,class,design-patterns,Ios,Objective C,Class,Design Patterns,在我的Objective-C应用程序中,一些视图控制器有几十个IBOutlet和40多种方法。要通读代码真的很难。我试图通过在单独的控制器类中声明属性和方法来限制它们的数量 是否有一些好的实践来限制类中的代码量,或者我必须接受它,因为我的类有许多任务要控制?我认为您最终得到的是一种称为“海量视图控制器”的东西 请看下面的链接 有更多的方法来缓解这个问题。如果我是对的,你可能会追随MVC。如果是这样的话,你应该考虑MVP/MVVM/VIPER体系结构。 典型地,在IOS应用程序编程中,视图控制器

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


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

我认为您最终得到的是一种称为“海量视图控制器”的东西

请看下面的链接


有更多的方法来缓解这个问题。如果我是对的,你可能会追随MVC。如果是这样的话,你应该考虑MVP/MVVM/VIPER体系结构。

典型地,在IOS应用程序编程中,视图控制器变大了,因为它执行了属于其他层的任务。这些层是:

  • MVC中的C:视图控制器实际上不是MVC中的C。MVC中的C不直接保留对视图对象(标签、按钮等)的引用。相反,它公开了接收从视图对象或从任何地方(包括视图控制器)发送的请求的方法。C的代码没有提到UI类。它的任务是将“原始”请求转换为内层理解的内容,并传递给内层,即
  • 业务逻辑层(MVC中的M):该层中的代码绝对不能了解任何有关UI的信息
  • 举一个简单的例子:如果您的业务逻辑是关于计算两个整数的和,并且您的UI有两个文本框,那么C将负责将两个字符串转换为两个整数。在本例中,视图控制器只是一个管理器,它保存对两个文本框的引用。它知道如何直接操作这些文本框,如何从这些文本框接收事件,以及如何调用(真实的)控制器


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

    显然在MVC中,“C”控制器有很多事情要做,比如处理视图的生命周期事件、在iActions中处理视图回调以及其他类似的任务。如果我们正在使用“M”模型中的数据执行某些操作,这也是在控制器中完成的。例如,将日期对象转换为字符串并显示在“V”视图中,或在处理后显示一些计数

    不负责管理视图和处理数据的代码可以移动到其他类。这种全新的设计模式称为MVVM-Model-View-Model。ViewModels将具有与数据操作相关的方法。我想这将有助于Viewcontrollers从处理如此多的事情中得到一些缓解,并在代码方面有所收缩

    如果您想了解有关MVVM设计模式的更多信息,请浏览以下链接:


    希望这对您有所帮助。

    您是否遵循MVC模式?