模型视图控制器中的模型(MVP)模式

3

我猜'Model'在MVP中代表领域模型或演示/视图模型,我的理解正确吗?


@Jan 我确实是指MVP。我的问题有什么问题吗?可能是我理解上的一些缺失。 - David
1个回答

7

是的,模型本质上可以是任何模型。我认为,MVC的最初意图是它是一个领域对象,这当然仍然是可能的。

然而,我的经验表明,如果我们在领域模型和视图之间引入专门的ViewModel / Presentation Model作为隔离层,则可以实现更好的匹配。

即使ViewModel在语义上与领域对象完全相同,这样的隔离也使我们能够独立地变化两者,从而遵循单一职责原则

通常情况下,视图需要一些适用于特定UI技术的逻辑,而这种逻辑与领域模型不匹配。例如:

  • 确定特定控件是否应启用或禁用的逻辑。领域模型不应了解任何控件。
  • 将状态映射到颜色的逻辑。颜色是技术特定的 - 它们在Windows Forms、WPF和ASP.NET中是不同的CLR类型。
  • 验证。输入表单通常允许输入无效数据而不抛出异常。相反,它们向用户提供数据无效的反馈。另一方面,领域对象应该保护它们的不变量,因此在输入无效时抛出异常。

更多信息可以在此处找到。


感谢您的精彩解释。我的意图是让控制器查询域,并由一个助手(一种映射器/组装器)构建特定于演示的视图模型,您认为这种方法正确吗? - David
是的,访问领域模型以检索所需内容,使用映射器将其映射到视图模型,并使用该视图模型呈现视图。这基本上也是我所做的。 - Mark Seemann
再次感谢你,马克。我对这个主题有一些其他的问题要提出,并希望得到你的意见。 - David

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