模型的属性是否应由视图模型公开?

时间:2012-11-19 08:38:49

标签: mvvm model viewmodel

我已经阅读了几篇关于MVVM模式的文章和教程,但有一件事我找不到有关的独特信息。我们来看下面的例子:

该模型包含两个字段和属性:

private string username;
public string Username {
  get; set;
}

private string password;
public string Password {
  get; set;
}

现在,视图模型应该包含什么?它应该只包含模型的实例还是应该“重新暴露”模型的属性?

private Model _model;
public Model Model {
  get; set;
}

或者...

private Model _model;
public Model Model {
  get; set;
}

public Username {
  get { return _model.Username; }
  set { _model.Username = value; }
}

我在几篇文章中看到了两种变体,现在不确定哪种方法是正确的。

1 个答案:

答案 0 :(得分:1)

这个问题没有一般的正确或错误的答案。这取决于背景和个人偏好。

我个人倾向于不直接将模型暴露给视图。我喜欢有一个专门为视图定制的ViewModel。我不想仅仅因为视图需要它而在模型中实现任何东西(当模型暴露给视图时我可能会这样做)。

在我的ViewModel中,我希望尽可能少地依赖于模型。如果我可以侥幸逃脱,我希望有一个ViewModel,它与Model 没有直接的依赖关系(并且有一些外部实体/服务填充做映射)。