在面向数据的应用程序的上下文中,它使用数据库:
我只使用FluentValidations
来验证Id是正数,或者参数不是null
:没有碰到数据库的东西
但过了一段时间后,我想知道为什么我不会验证实际查询数据库的内容。所以我决定进一步验证,现在我的Validator
不仅验证指定的Id是正数,还实体存在。
这是验证者的目标吗?我滥用了吗?验证者是否应该检查复杂的业务规则?
答案 0 :(得分:1)
恕我直言,使用FluentValidator
来检查业务规则是完全没问题的。但最好将业务规则与简单验证分开。例如,如果它的ASP.NET应用程序通用验证应该在表示层中执行(如使用ModelState
),但业务规则应该在域层中发挥作用(例如在某些服务或decorator中)。
您可以找到这些链接有用:
答案 1 :(得分:0)
有两种方法可以进行此类验证:
1.创建一个类并从ProperyValidator继承并将其用于实体验证类。
public class UniqueValidator<T> : PropertyValidator where T:class
{
//inject the repository
protected override bool isValid(PropertyValidatorContext context){
//check the validity
}
}
2.创建方法直接指向EntityValidation类
public class EntityValidation : AbstractValdiation<Entity>{
//inject the repository
//your current validations
public bool UniqueValue(Entity instance){
//query to validate
}
}