Asp.net mvc 3 在我的视图模型和逻辑层中寻找减少验证代码重复的方法

Asp.net mvc 3 在我的视图模型和逻辑层中寻找减少验证代码重复的方法,asp.net-mvc-3,Asp.net Mvc 3,目前,我们团队正在构建的应用程序使用内置的MVC属性和一些自制属性来验证视图模型。由于最佳实践设计原则,我们在逻辑层中放置了相同的规则。不幸的是,这导致了验证代码的重复 至少在MVC3中,如果禁用JavaScript,这些相同的属性仍将执行它们想要执行的验证,因此将视图模型转换为DTO并要求逻辑层验证它不是一个选项,因为这个过程已经由框架完成了 我没有发现下面的帖子有任何帮助。我使用了MS Enterprise Library,API与我们的团队不太合拍 我认为最好的方法是让验证属性在运行时绑

目前,我们团队正在构建的应用程序使用内置的MVC属性和一些自制属性来验证视图模型。由于最佳实践设计原则,我们在逻辑层中放置了相同的规则。不幸的是,这导致了验证代码的重复

至少在MVC3中,如果禁用JavaScript,这些相同的属性仍将执行它们想要执行的验证,因此将视图模型转换为DTO并要求逻辑层验证它不是一个选项,因为这个过程已经由框架完成了

我没有发现下面的帖子有任何帮助。我使用了MS Enterprise Library,API与我们的团队不太合拍


我认为最好的方法是让验证属性在运行时绑定到特定属性,并让依赖项注入容器来完成这项工作。这是可能的还是我们可以采取不同的方法?

您要求在此处执行多种验证类型。 您需要客户端验证(看起来)和其他一些业务验证层

如果是这样,我认为唯一的选择是:

  • 复制代码(我知道Im列表选项) 1a。在对象上使用数据批注进行客户端验证。业务层验证按照您定义的方式进行,并作为最终检查进行分离。例如,如果您使用实体框架的fluent API,这是一个标准路由
  • 客户端验证只是客户端的助手。域验证将在保存时进行。理想情况下,这是一种功能更强大的方法,但当域对象与视图模型上的属性名称不匹配时,这种方法就不那么友好了,因此您需要将域错误映射到视图模型属性错误中,这些错误通常不太糟糕,但可能会变得不确定
  • 实现IValidteableObject(并消除客户端验证)。然后从逻辑层和模型绑定器调用此验证逻辑
  • 您可以为验证注入代码,但它并不漂亮,而且我不确定在MVC验证路径之外它的可重用性如何
    除此之外,可能还有其他方法,但在我看来,这些是主要的选择。

    一种方法是:如果您的api是您的mvc应用程序,并且在您执行业务规则时验证已经完成,那么您可以假定它们是有效的。这是输入验证,当然是与您的域相关的东西,但是。。。如果您改变了思维方式,您的域需要有效的数据,并假设您在使用业务规则之前做了准备工作