2010-10-21 38 views
0

我正在处理一个需要同一模型的不同验证集的项目,我们正在试图找到处理它的最佳解决方案。如何在MVC3中处理服务层验证

一个简单的例子可以使用我们的客户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; } 
} 

在我们的第一个观点,所有字段是必需的,因为他们在使用DTO正在DataAnnotations所示。

在我们的第二个视图中,FirstName和LastName可能是必需的,但Title是可选的,甚至可能不会在视图中表示。

复杂化出现了,我们希望在我们的服务层中存在验证规则(以便我们可以在稍后利用相同验证提供API),它可以访问数据注释并对其进行验证,如果他们不验证,则向UI回报。

到目前为止,中奖的方法是:

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

这也意味着:

  • 确认不会发生在服务层,由于当时的对象了那里,他们将域对象,而不是的ViewModels。

有没有更好的办法,我们应该为企业应用程序处理?我们尚未找到解决方案。

回答

0

当它是特定于上下文的时候,你不能将所有的验证都塞进一个地方。使用你的获胜方法,但也让你的实体服务在该层进行适当的验证。