典型的 EF+MVC 系统将具有两个或三个级别的验证:
- 对于 ViewModel:输入/物理验证(DataAnnotations、FluentValidation),也就是长度、空值、范围、正则表达式等。
- 对于模型:输入/物理验证(如果不使用 MVC 并且数据来自另一个系统、WCF、表单等,则重复 1)
- 对于模型:逻辑/“业务规则”验证
对于实际模型/实体/域/“业务规则”,我找不到验证 2+3 的最佳实践。我们要么:
- 将简单的验证规则放在实体的属性设置器中(但这真的很混乱)
- 挂钩到 EF
SaveChanges()
,如果实体处于Added
orModified
状态,则触发验证(一次验证整个实体)
这很难维护。ViewModel 验证有很多想法,但对于模型验证,它是特定于域的,因此需要您确定一个创造性的解决方案,而我的并不是那么好。
- 是否有更好的方法或有用的工具(例如 DataAnnotations 或 FluentValidation,但对于域实体)?
- 进行模型验证或触发模型验证的最佳位置在哪里?