使用EF CodeFirst,WebApi与DTO和Angular(虽然前端选择并不重要):
我将验证放在生成表的类中,例如以下Required
属性,以确保列不为null:
[Required]
public string Name { get; set; }
在WebApi中,我使用DTO,所以在DTO模型上我与上面的完全相同,因此当模型绑定时我可以检查ModelState.IsValid
。
然后我在客户端进行验证,我很满意。
这是"最佳实践",还是我违反DRY原则与前两个?
所以看起来它们主要用于两个不同的东西:[1]用于生成表(在CodeFirst中),[2]用于验证来自客户端的输入。
例如,Required
字段上的DateTime
验证属性几乎没有意义,因为尝试将null
转换为DateTime
时会出错在验证开始之前。
但是,对于字符串,情况有所不同:您需要数据库中Required
字段的数据库模型上的NOT NULL
属性,但您还需要Required
在DTO字符串字段上的属性,否则它将在您保存时通过验证和错误。
答案 0 :(得分:2)
我认为你没有违反DRY,因为虽然你在两个班级中都使用相同的符号,但这个符号在每个班级中用于不同的目的。
如果您发现数据模型中使用的DTO与Web API控制器中使用的DTO相同,则可能需要对两者进行合理化。
答案 1 :(得分:1)
恕我直言应用程序中的每一层都应检查其处理数据的有效性。
您是否也将该属性标记为数据库中的可空列?
不,你没有违反DRY原则。
答案 2 :(得分:0)