Ios 视图模型是否应该对视图控制器中的事件作出反应?

Ios 视图模型是否应该对视图控制器中的事件作出反应?,ios,iphone,mvvm,reactive-cocoa,Ios,Iphone,Mvvm,Reactive Cocoa,我已经实现MVVM范例一段时间了,同时在项目的某些部分采用了ReactiveCocoa。我有一个关于与视图相关的对象的生存期的简单问题 想象一下,每当视图从屏幕上消失时,视图模型需要更新对象中的某些内容。该更新是否由视图控制器调用或者视图模型是否可以观察到,例如视图控制器中的视图将消失选择器并对其作出反应?这是一种不好的做法吗?您使用MVVM模式将视图(和视图控制器,在Cocoa中也被视为视图层的一部分)与模型分离。这意味着视图模型不应该知道有关视图控制器的任何信息 如中所述,理想情况下,您甚至

我已经实现MVVM范例一段时间了,同时在项目的某些部分采用了ReactiveCocoa。我有一个关于与视图相关的对象的生存期的简单问题


想象一下,每当
视图
从屏幕上消失时,
视图
模型需要更新对象中的某些内容。该更新是否由
视图控制器调用
或者
视图
模型是否可以观察到,例如
视图控制器
中的视图将消失选择器并对其作出反应?这是一种不好的做法吗?

您使用MVVM模式将视图(和视图控制器,在Cocoa中也被视为视图层的一部分)与模型分离。这意味着视图模型不应该知道有关视图控制器的任何信息

如中所述,理想情况下,您甚至不应该在视图模型中导入
UIKit

换句话说,视图模型应该可以重用,以便以不同的方式显示相同的数据:您可能希望在视图控制器和普通的
UIView
子类中的其他地方显示数据(考虑在
PersonTableViewCell
和点击单元格后显示的
PersonDetailsViewController
中使用
PersonViewModel
——我认为这是一种非常常见的情况)

如果您在视图模型中以某种方式观察到
view将消失
,则它与
UIViewController
子类紧密耦合,不能与
UIView
子类一起使用

应通过以下方式在视图控制器中调用对视图模型的更新:

- (void)viewWillDisappear:(BOOL)animated
  [super viewWillDisappear:animated];
  [self.viewModel updateStuff];
}

使用MVVM模式是为了将视图(和视图控制器,在Cocoa中,它们也被视为视图层的一部分)与模型解耦。这意味着视图模型不应该知道关于视图控制器的任何信息

如中所述,理想情况下,您甚至不应该在视图模型中导入
UIKit

换句话说,视图模型应该可以重用,以便以不同的方式显示相同的数据:您可能希望在视图控制器和普通的
UIView
子类中的其他地方显示数据(考虑在
PersonTableViewCell
和点击单元格后显示的
PersonDetailsViewController
中使用
PersonViewModel
——我认为这是一种非常常见的情况)

如果您在视图模型中以某种方式观察到
view将消失
,则它与
UIViewController
子类紧密耦合,不能与
UIView
子类一起使用

应通过以下方式在视图控制器中调用对视图模型的更新:

- (void)viewWillDisappear:(BOOL)animated
  [super viewWillDisappear:animated];
  [self.viewModel updateStuff];
}

嘿,这很有道理!谢谢你的回答和分享那篇文章,教会了我很多。嘿,这很有道理!谢谢你的回答和分享那篇文章,教会了我很多。