在MVVM模式中,Model代表什么?

17

应该放入 Model 的内容也可以放入 View-Model 中,例如:Public Properties、IDataErroInfo 和 INotifyPropertyChanged,那么实际上应该放什么进入 Model?

2个回答

34

模型

业务数据 + 业务逻辑 + 业务规则

视图

应用程序用户界面

视图模型

是对模型的包装,易于使用最少的代码/工作量由视图进行阅读/绑定。

  1. IDataErrorInfo - 应该放在视图模型中
  2. INotifyPropertyChanged - 应该放在视图模型中。如果必要,也可以放在模型中(但不建议)
  3. 公共属性 - 当然模型应该有它们。

1
呃,模型应该完全独立于UI。INotifyPropertyChanged是UI关注的事情。我永远不会在模型中实现INPC。模型需要尽可能简洁和独立。例如,“银行账户”永远不会有通知任何数据更改的责任。 - Peter Ritchie
1
@PeterRitchie:我完全同意。你可以阅读(如果需要)=(不推荐) - decyclone
"INotifyPropertyChanged 应该放在 ViewModel 中..." - Peter Ritchie
8
INotifyPropertyChanged 不是 UI 相关的。它是用来通知属性变化的接口,仅此而已。因此,如果需要,完全可以在模型中使用。 - Marc
7
实际上,让模型实现 INPC 可以节省很多样板代码,无需将属性从模型通过视图模型重新传递到视图。 - kasperhj
显示剩余4条评论

4
假设您要编写一个用于数据加载的批处理过程。批处理过程将仅访问模型,因此处理业务规则所需的一切都应该与UI分离,并放置在模型中。ViewModel可能具有某些业务规则,但仅涉及UI。
在我构建的应用程序中,Views和ViewModels位于一个程序集中,而模型位于另一个程序集中。模型没有引用View的程序集,只有模型程序集才引用底层数据存储(使用Linq和Web服务调用的组合)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接