FluentValidations 可以做什么类型的验证?

What kind of validations to do with FluentValidations?

在面向数据的应用程序上下文中,使用数据库:

我使用 FluentValidations 只是为了验证 Id 是否为正数,或者参数不是 null没有命中的东西数据库.

但过了一段时间后,我想知道为什么我不验证 实际查询数据库 的东西。所以我决定进一步验证,现在,我的 Validator 不仅验证指定的 Id 是一个正数,而且 还验证实体存在 .

这是验证者的目标吗?我在滥用它吗?验证器是否也应该检查复杂的业务规则?

有两种方法可以进行这种验证:
1.Create 一个 class 并继承自 ProperyValidator 并将其用于实体验证 class.

public class UniqueValidator<T> : PropertyValidator where T:class
{
 //inject the repository
 protected override bool isValid(PropertyValidatorContext context){
  //check the validity
 }
}

2.Create 方法直接指向 EntityValidation class

public class EntityValidation : AbstractValdiation<Entity>{
 //inject the repository


 //your current validations

 public bool UniqueValue(Entity instance){
   //query to validate
 }
}

恕我直言,使用 FluentValidator 来检查业务规则完全没问题。但最好将业务规则与简单验证分开。例如,如果它是 ASP.NET 应用程序,一般验证应在表示层执行(如使用 ModelState),但业务规则应在域层中发挥作用(例如,在某些服务或 decorator ).

您会发现这些链接很有用:

  1. ValidateModelAttribute
  2. Validate command using Decorator pattern
  3. Simple Injector(fast DI container, great for decorators)