在ASP.NET MVC中为复杂数据验证放置数据管理规则的位置?

时间:2010-05-21 12:01:29

标签: asp.net asp.net-mvc validation data-management

我目前正在开发一个ASP.NET MVC2项目。这是我第一次使用真正的MVC Web应用程序。 ASP.NET MVC website确实帮助我快速入门,但我仍然对数据模型验证有一些模糊的知识。

我的问题是,在涉及复杂的验证规则时,我真的不知道在哪里管理我填充的数据模型。例如,使用Regex验证字符串字段非常简单,我知道我只需要使用特定属性来装饰我的字段,因此数据管理规则在模型中实现。但是,如果我有多个字段需要相互验证,例如需要根据特定时间规则正确设置的多个日期时间,我需要在哪里验证它们?我知道我可以创建自己的验证属性,但有时验证会询问一个特定的验证路径,复杂的路径要使用属性进行验证。

这第一个问题也引出了一个相关的问题,即在控制器中验证模型是否正确?因为目前这是我找到复杂验证的唯一方法。但是我发现这有点脏,我觉得它不适合控制器角色而且更难测试(多个代码路径)。

感谢。

注意:我在这里有一些非常好的解决方案,但我正在等待其他想法和一些“最佳实践”解决方案“。

3 个答案:

答案 0 :(得分:4)

Mega Dupe。巨型主观。“在哪里以及如何验证MVC”的论点已被打死,而没有得出一个直接的答案。这对每个开发商/商店来说都是如此主观和哲学,以至于每个人几乎不可能就任何事情达成一致。

另一个问题是验证工具甚至有一堆形状和大小,可以在不同的范围和层中运行。它几乎是疯狂的验证工具的多样性。如果(someString!=“”)变得如此难以怎样? ;)

如果您阅读其他答案,您很快就会发现没有最佳做法。一旦进入Domain Driven Design主体并讨论无效状态和对象,您会发现讨论变得更加复杂。

Where do you do your validation? model, controller or view

ASP.NET MVC 2 validation using DTOs instead of domain entities

Does ASP.Net MVC 2 validation need some more thought in terms of patterns and use?

Mapping Validation Attributes From Domain Entity to DTO

Which validation library for ASP.NET MVC?

ASP.NET MVC - User Input and Service/Repository - Where to do Validation?

ASP.NET MVC: Is Data Annotation Validation Enough?

MVC - where to implement form validation (server-side)?

Asp.Net MVC Validation

DDD

Validation in a Domain Driven Design

答案 1 :(得分:2)

我的观点是尽可能保持视图干净,并尝试强制视图仅显示数据(尽可能保持视图愚蠢)。

当然,您可以在视图中进行一些简单的验证,例如Required,Regex规则等。

复杂的业务规则应位于业务实体或某个业务逻辑层中。

我在我的MVC项目中做的是让模型调用一个方法,如Validate(),它将检查最终的验证级别,如业务规则等,然后我可以调用Save();

答案 2 :(得分:1)

一旦你有一个可以验证的填充类,只需将它传递给控制器​​中的验证类。