模型视图Presenter MVP中的模型

时间:2010-01-09 10:35:30

标签: design-patterns mvp

我认为MVP中M代表的'Model'可以是域模型还是演示/视图模型,我是否正确?

1 个答案:

答案 0 :(得分:7)

是的,模型基本上可以是任何模型。我认为它的方式,MVC的初衷是它是一个域对象,这当然是可能的。

但是,我的经验表明,如果我们引入专门的ViewModel / Presentation Model作为域模型和视图之间的绝缘,就可以实现更好的契合。

即使ViewModel在语义上看起来与Domain Object完全相同,这种绝缘使我们能够独立地改变这两者,从而遵循Single Responsibility Principle

经常会发现View需要一些适用于特定UI技术的逻辑,而这种逻辑非常适合域模型。例子包括

  • 确定是应启用还是禁用特定控件的逻辑。域模型应该对控件一无所知。
  • 将状态映射到颜色的逻辑。颜色是特定于技术的 - 它们是Windows窗体,WPF和ASP.NET中不同的CLR类型。
  • 验证。输入表单通常允许输入无效数据而不会抛出异常。相反,它们向用户提供数据无效的反馈。另一方面,域对象应该保护它们的不变量,从而抛出无效的输入。

可在此处找到更多信息