如何在MVC3中处理服务层验证

时间:2010-10-21 17:29:23

标签: validation architecture asp.net-mvc-3

我正在开发一个项目,该项目需要针对同一模型的不同验证集,我们正在尝试找到最佳解决方案来处理它。

简化示例可以使用我们的客户DTO:

public class Customer
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required] // Only required on some views
    public string Title { get; set; }
}

在我们的第一个视图中,所有字段都是必需的,因为它们是使用DataAnnotations在DTO中显示的。

在我们的第二个视图中,可能需要FirstName和LastName,但Title是可选的,甚至可能无法在视图上显示。

复杂性来自于,我们希望在我们的服务层中存在验证规则(以便我们可以在稍后使用相同的验证提供API),这可以访问数据注释并对其进行验证,如果他们不验证,则报告回UI。

到目前为止,获胜的方法是:

      
  • 每个视图都有一个专用的视图模型,DataAnnotations存在于其中。
  •   
  • 然后,viewmodel使用Automapper等方式映射我们的域对象。
  •   
  • 然后将域对象传递给存储库和服务以对其执行操作。

这也意味着:

      
  • 在服务层中不会进行验证,因为当对象到达那里时,它们将是域对象而不是视图模型。

我们应该为企业应用程序处理这个问题吗?我们还没有找到解决方案。

1 个答案:

答案 0 :(得分:0)

当特定于上下文时,您无法将所有验证都塞进一个地方。使用您的获胜方法,同时让您的实体服务在该层中进行适当的验证。