Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 模型视图中的模型演示者MVP_Design Patterns_Mvp - Fatal编程技术网

Design patterns 模型视图中的模型演示者MVP

Design patterns 模型视图中的模型演示者MVP,design-patterns,mvp,Design Patterns,Mvp,我认为MVP中由M表示的“模型”可以是域模型或表示/视图模型,这是正确的吗?是的,该模型基本上可以是任何模型。在我看来,MVC的初衷是它是一个域对象,这当然仍然是可能的 然而,我的经验表明,如果我们引入一个专门的视图模型/表示模型作为域模型和视图之间的隔离,则可以实现更好的匹配 即使ViewModel在语义上似乎与Domain对象相同,这样的隔离也使我们能够独立地改变这两个对象,从而遵循规则 通常情况下,视图需要一些应用于特定UI技术的逻辑,而这种逻辑非常适合域模型。例子包括 确定应启用还是禁

我认为MVP中由M表示的“模型”可以是域模型或表示/视图模型,这是正确的吗?

是的,该模型基本上可以是任何模型。在我看来,MVC的初衷是它是一个域对象,这当然仍然是可能的

然而,我的经验表明,如果我们引入一个专门的视图模型/表示模型作为域模型和视图之间的隔离,则可以实现更好的匹配

即使ViewModel在语义上似乎与Domain对象相同,这样的隔离也使我们能够独立地改变这两个对象,从而遵循规则

通常情况下,视图需要一些应用于特定UI技术的逻辑,而这种逻辑非常适合域模型。例子包括

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


@Jan我是说MVP。我的问题有问题吗?可能是缺乏理解。谢谢你的解释。我的意图是让控制器查询域,让助手(某种映射器/汇编程序)构建一个特定于表示的视图模型,您是否同意这种方法是正确的?是的,点击域模型检索您需要的任何内容,使用映射器映射到视图模型,并使用该视图模型渲染视图。基本上我也是这么做的。再次感谢马克。我还有一些关于这个问题的其他问题,我将提出,并感谢你们的意见。