模型视图Presenter MVP中的模型

Dav*_*vid 3 mvp design-patterns

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

Mar*_*ann 7

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

但是,我的经验表明,如果我们引入一个专门的ViewModel/Presentation Model作为Domain Model和View之间的绝缘,就可以实现更好的契合.

即使ViewModel在语义上看起来与Domain Object相同,这种绝缘使我们能够独立地改变这两者,从而遵循单一责任原则.

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

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

更多信息可以在这里找到