【问题标题】:What would be the MVC best practice in a case like this?在这种情况下,MVC 最佳实践是什么?
【发布时间】:2024-05-23 08:45:01
【问题描述】:

我有一个没有笔尖的视图控制器。我正在代码中创建视图。我在viewDidLoad中一直是这样做的@

UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 475, 50.0)];
self.headerView = header;
self.headerView.backgroundColor = [UIColor yellowColor];
[self.view addSubview:self.headerView];

UIView *footer = [[UIView alloc] initWithFrame:CGRectMake(0, self.view.height - 50.0, 475, 50.0)];
self.footerView = footer;
self.footerView.autoresizingMask = UIViewAutoresizingFlexibleTopMargin;
self.footerView.backgroundColor = [UIColor greenColor];
[self.view addSubview:self.footerView];

等等。然而,随着我的viewDidLoad 变得越来越长,我觉得这可能不应该在我的控制器中。这真的应该是一个子类 UIView,然后加载到我的viewDidLoad 中吗?这种情况的 MVC 最佳实践是什么?

【问题讨论】:

  • 同意@gcamp 和 JeremyP。但无需及早过度设计。记下你的 viewLoad 变得越来越丑陋,一旦你开始意识到这些视图需要做的所有其他事情,就构建你的子类。 (就像它们可能都是公共子类的子类)。当您了解更多时就去做,并为关心它而感到自豪!

标签: iphone objective-c ios ipad model-view-controller


【解决方案1】:

这真的应该是一个子类 UIView,然后加载到我的 viewDidLoad 中吗?

在我看来:是的。我可能会有一个用于控制器视图的类,它会创建页眉和页脚视图(它们本身可以从 UIView 子类化)。

针对这种情况的 MVC 最佳实践是什么?

这些视图和子视图都是 MVC 的“V”部分的一部分。我想得越多,我就越认为,当你现在有东西时,控制器正在做一些“V”的工作。我并不是说这一定很糟糕,但是随着视图创建代码变得越来越大,您当然应该考虑更好的分离。

【讨论】:

    【解决方案2】:

    如果您觉得您的页眉和页脚可以重复使用,那么是的,我会为它们创建新的类。此处可重用并不意味着您将在应用程序的其他地方重用这些,只是最终可以完成。

    如果不是这样,您可以简单地添加一个方法 createHeader,您可以从 viewDidLoad 调用该方法。

    【讨论】:

      【解决方案3】:

      控制器通常是“老板”——它将模型和视图结合在一起。所以它可以对两个层都有深入的了解。从这个角度来看,让它创建视图层次结构并不一定是坏事,尽管正如@danh 指出的那样,您应该根据具体情况来决定。如果代码开始“闻起来”,那么请继续重构它。如果您的视图层次结构开始变得非常复杂,那么您可能需要引入额外的控制器来划分责任。例如,您可能有一个用于处理页眉的控制器,另一个用于处理页脚等。

      【讨论】:

        最近更新 更多