gpt4 book ai didi

asp.net-mvc - 是否应该始终在模型级别强制执行验证规则?

转载 作者:行者123 更新时间:2023-12-04 20:04:18 25 4
gpt4 key购买 nike

借助新的 ASP.NET MVC 2 验证功能,我们可以使用 DataAnnotations 修饰域模型对象的属性。描述有效值标准的属性。 DefaultModelBinder知道这一点并填充ModelState.IsValid因此,在调用 Controller 操作之前。由于验证规则是在域模型中定义的,因此这被视为模型级别的验证。 Scott Guthrie writes :

The benefit of implementing the rules within our Person object is that this will ensure that the validation will be enforced via any scenario within our application that uses the Person object [...]



严格来说,我认为这些规则并没有真正执行,因为所有的操作方法都需要检查 ModelState.IsValid属性(property)并根据其值(value)采取不同的行动。此外,虽然规则是在模型中定义的,但它们在表示层中应用,因为这是所有模型绑定(bind)器所在的地方。但我想这只是我对单词的选择很挑剔(或者我只是错了)。

但是,如何在域模型级别执行验证规则呢? Steven Sanderson 在 a post about the xVal validation framework 中使用了这种方法。他写道:

Now, the model tier enforces its own validity by refusing to place bookings that don’t meet all validation and business rules.



在他的示例中,“预订管理器”(位于模型中)在使用代码尝试进行无效预订时抛出一个特殊的业务规则异常。因此,消费代码不可能进行无效预订,无论它是否事先检查了预订的有效性(通过 ModelState.IsValid 或其他一些自定义构造)。

所以我的问题是:

假设在模型级别定义了验证规则,它们是否也应该在模型中强制执行?

(请注意,我对领域驱动设计的概念真的很陌生,所以如果我没有使用正确的术语,请多多包涵。)

最佳答案

Assuming that there are validation rules defined at the model level, should they also be enforced within the model?



是的。如果你提供了一种让规则短路的方法,那么它们就会短路。也许不是你,也可能不会很快,但肯定会在 future x 周/月/年由其他开发人员完成。

此外,总是存在人为错误因素——也许有一天当你累了或在深夜编码时,你错误地读取了这个验证标志,实际上让那些没有验证的记录通过。 (不要 mock ,我自己做过!)

我现在总是确保一条记录在未经模型验证的情况下无法进入数据库。

关于asp.net-mvc - 是否应该始终在模型级别强制执行验证规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2252766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com