使用EF CodeFirst重复验证;DRY原则

本文关键字:DRY 原则 验证 EF CodeFirst 使用 | 更新日期: 2023-09-27 18:04:35

使用EF CodeFirst, WebApi与dto和Angular(尽管前端选择无关紧要):

我将验证放在生成表的类中,例如下面的Required属性,以确保列不为空:

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

在WebApi中,我使用DTO,因此在DTO模型上我具有与上述完全相同的内容,因此当模型绑定时,我可以检查ModelState.IsValid

然后我在客户端进行验证,这是我很满意的。

这是"最佳实践"吗,还是我违反了前两个DRY原则?


编辑

所以看起来它们主要用于两件不同的事情:[1]用于生成表(在CodeFirst中),[2]用于验证来自客户端的输入。

例如,在DateTime字段上使用Required验证属性几乎没有意义,因为在验证开始之前尝试将null转换为DateTime会出错。

然而,对于字符串,它是不同的:您需要数据库中的NOT NULL字段的DB模型上的Required属性,但您还需要DTO字符串字段上的Required属性,否则它将通过验证并在保存时出错。

使用EF CodeFirst重复验证;DRY原则

我不认为你违反了DRY,因为尽管你在两个类中使用相同的符号,但该符号在每个类中用于不同的目的。

如果您发现您在数据模型中使用的dto与您在Web API控制器中使用的dto相同,则可能需要将两者合理化。

应用程序中的每一层都应该检查它所处理的数据的有效性。

您是否还将该属性标记为数据库中的不可空列?

看一下这个模拟模型之间属性副本的解决方案:http://patrickdesjardins.com/blog/how-to-automap-asp-net-attribute-from-model-to-viewmodel.