创建用于模型验证的ViewModel是否奇怪且不必要?

时间:2016-09-20 21:05:57

标签: asp.net-mvc

有没有充分的理由创建ViewModel复制模型并添加验证逻辑? 为什么不简单地用验证逻辑扩展当前模型? 如果要创建ViewModel副本,则需要

  1. 创建具有相应字段的类(如果您只有很少的模型可以验证,这不是大问题,但如果您有很多模型,那该怎么办...)
  2. 设置automapper,可能会很慢,并为您的解决方案添加额外的逻辑(或者手工完成,这可能是个坏主意)
  3. 支持ViewModel的模型更改
  4. 如果您只是扩展基本模型,这些问题就会消失。那么为什么创建ViewModel层如此受欢迎呢?

1 个答案:

答案 0 :(得分:1)

对于同一模型,您可以拥有两个具有不同验证逻辑的视图。

经典示例是一个注册表单,包含单页表单和多页向导。

在这两种情况下,模型都是相同的,但在向导视图中,它合法地提交半个填充的模型,而单页版本应该验证所有字段。

采用这种可能性进一步导致每种视图方法的一种视图模型。您总是为视图创建视图模型,因为您希望它提供一般性的灵活性。

此外,该视图非常罕见,与模型完全匹配。您通常需要多个模型加上一些奇数额外位。例如,登录为'的用户模型。标题,要显示的模型列表加上分页信息。

你可以通过使用ViewModels来避免你提到的一些问题,ViewModels简单地包装模型并在不需要额外逻辑的情况下公开它们的属性