使用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
属性,否则它将通过验证并在保存时出错。
我不认为你违反了DRY,因为尽管你在两个类中使用相同的符号,但该符号在每个类中用于不同的目的。
如果您发现您在数据模型中使用的dto与您在Web API控制器中使用的dto相同,则可能需要将两者合理化。
应用程序中的每一层都应该检查它所处理的数据的有效性。
您是否还将该属性标记为数据库中的不可空列?
看一下这个模拟模型之间属性副本的解决方案:http://patrickdesjardins.com/blog/how-to-automap-asp-net-attribute-from-model-to-viewmodel.