我有一个关于MVVM的概念问题。我正在快速学习这种模式。
这是我的情况: 我有一个包含用户列表的屏幕。 UserViewModel具有一个属性列表,但控制器不应该知道用户模型。我读到控制器不应该完全了解模型。
如果控制器向此列表的用户请求数据,该数据必须是数据字典还是用户模型?
然后,UserViewModel还必须包含与用户模型相同的属性吗?
感谢您的帮助。
答案 0 :(得分:2)
如果控制器向此列表的用户请求数据,则此数据必须是数据字典,还是用户模型?
数据可以是UserModel
。
然后,UserViewModel还必须包含与User模型相同的属性?
HHM。当然不是。为什么UserViewModel
应具有UserModel
具有的相同属性?没有任何理由。
出于需要将某些userModel.name
属性返回给控制器的目的,您可以而且应该仅从UserModel
的属性获取此属性,即从{{1}获取正确的UserModel
而不是得到财产:
ViewModel
但是,如果您需要为控制器准备值,可以在func controllerFunc() {
let userModel = viewModel.getUserModelFromList()
print(userModel.name)
}
中创建属性,其中包含对ViewModel
属性的某种修改。控制器应从UserModel
获取属性,而不是从ViewModel
获取属性。
我读到控制器不应该完全了解模型。
嗯,理想情况下 - 是的。另外,应该提到UserModel
不应该对UI组件有任何了解,即ViewModel
不应该有ViewModel
语句。
例如,如果您需要import UIKIt
,则应从UIImage
返回图像的名称(String
类型),并在控制器中创建ViewModel
对象。