c# - 我的 View 模型中应该包含什么?

标签 c# asp.net-mvc asp.net-mvc-4

<分区>

我有名为 ProductCategory 的业务模型,如下所示,我在其中添加了验证:

public class Product
{
    public int ProductId {get; set;}
    [Required]
    [StringLength(25)]
    public string Name {get; set;}
    public string Description {get; set;}
    public int CategoryId {get; set;}
}

public class Category
{
    public int CategoryId {get; set;}
    public string Name {get; set;}
}

对于 View 模型,我创建了这样的东西:

public class ProductViewModel
{
    public Product Product {get; set;}
    public IList<Category> Categories  {get; set;}
}

我的一个 friend 建议将所有验证保留在 View 模型中,并将业务模型的所有属性映射到 View 模型中,如下所示:

public class ProductViewModel
{
    public int ProductId {get; set;}
    [Required]
    [StringLength(25)]
    public string Name {get; set;}
    public string Description {get; set;}
    public int CategoryId {get; set;}
    public IList<SelectListItem> CategoryDropdownValues  {get; set;}
}

我问他这种方法相对于上面的方法有什么好处,他不是很确定。但他坚持认为,您不应直接在 View 中使用业务模型,而应仅验证 View 模型。

我的问题:

  • 我应该将验证逻辑保留在 View 模型还是业务模型中?
  • 让 View 模型依赖于业务模型是不是很糟糕?

最佳答案

你的 friend 是对的。关于您的问题

  1. 有用户输入验证和业务规则验证。大多数时候输入验证是业务规则验证的一部分,但是在 asp.net mvc 中,框架会自动执行该验证。为了防止重复,这意味着 UI 验证应该使用业务验证。这可以使用 FluentValidations 轻松完成(数据注释在我看来太死板了)。

    因此在这种情况下,UI 部署是在 UI 级别完成的,使用业务模型验证。

  2. View 模型总是至少在一定程度上取决于业务模型,但两者并不相同。它们是具有不同用途的不同模型,因此应将它们分开。事实上,您的 View 模型可能 90% 与业务(嗯,数据结构)模型相同,这只是一个巧合。我们希望将每个模型保留在自己的层中,而恰好它们具有相同的属性。

关于c# - 我的 View 模型中应该包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21240110/

相关文章:

c# - 挂接到 HttpModule 中的 Application_Start

c# - 如何在服务器计算机的 Web API 中验证 WPF 应用程序 Azure token

c# - 类型存在于 2 个程序集中

asp.net-mvc - MVC Web 应用程序数据库由用户权限驱动的菜单

javascript - IE7 asp.net mvc加载错误

visual-studio-2010 - 无法查看我的新 MVC 4 应用程序

c# - 在线显示 ValidationResult 错误

c# - 编程对象建议

c# - 在 MVC 中从同步调用异步而没有等待时,TPL 任务死锁

jquery - 使用 jQuery 验证和 MVC 验证 ajax 中加载的表单