在哪里执行视图控制器“业务逻辑”?

时间:2014-10-31 12:57:06

标签: ios oop swift architecture ios8

我在视图控制器中工作,当我完成它时,我在onViewDidLoad中有以下内容(我简化了代码/变量,但想法是一样的):

    //Show Fields
    txtField1.hidden = _settings.showField1 == true
    txtField2.hidden = _settings.userNeedsField2 == true

    //Display some other text about weather
    if (_myWeatherService.TheMoonIsFull && _settings.userNeedsField3)
    {
        lblField3.text = "Some text about something"
    }
    else {
        txtField3.hidden = true
    }

    //Handle Time Stuff
    if (_settings.UserPreferenceTimeOfDay == true) {
       if ((current24ClockHourInTheDay >= 5 && current24ClockHourInTheDay <= 18))
          {
            txtField4.hidden = true
            txtField5.text = "DAY"
          }
       else {
            txtField4.hidden = true
            txtField5.text = "NIGHT"
        }
    else {
            txtField4.hidden = false
            txtField5.text = ""
        }

这将持续另外20行左右。

基本上我觉得在视图控制器(与演示相关的决策)中可能最好留下一些东西,但其中一些我在其他视图控制器中重用。另外一些基于用户对一天中的时间和一天中的小时数的偏好的逻辑让我对它应该在哪里感到困惑(如果某些服务处理这些决定,那么我可以重用这些代码)?

谢谢!

2 个答案:

答案 0 :(得分:0)

看起来你已经拥有了_settings对象。考虑在_settings中创建便捷方法,该方法封装了您希望用于修改UI的条件。例如,不是只拥有UserPreferenceTimeOfDay的访问者,而是为timeOfDayString包装一个选择器。

txtField5.text = _settings.timeOfDayString;
txtField4.hidden = ([txtField5.text length] == 0);

- (NSString *)timeOfDayString {
  if (self.UserPreferenceTimeOfDay) {
    if (self.current24ClockHourInTheDay >= 5 && current24ClockHourInTheDay <= 18) {
      return @"DAY";
    } else {
      return @"NIGHT";
    }
  }
  return @"";
}

注意:我刚刚意识到你正在使用swift,但我不是快速编程的主人。但理论应该是相同的。

答案 1 :(得分:0)

我无法理解这段代码,但是如果你想重用一些代码,你必须将它带到一个单独的视图控制器,当你需要这个功能时,你只需要实例化控制器并使用它它...在您的情况下,所有用户时间首选项可以在UserTimePreferencess.swift文件(视图控制器)中分隔。如果您不想在viewDidLoad中拥有如此多的代码,您可以将此代码移动到视图控制器中的其他位置,并在viewDIdLoad中调用它们