用途
dotnet-fluent-validation 用于为 .NET 项目中的命令(Command)和查询(Query)生成 FluentValidation 验证器。它面向采用整洁架构、以 CQRS 组织代码的项目,帮助把验证逻辑从领域模型中分离出来,并通过 MediatR 管道行为实现自动验证。
主要能力
- 声明式规则:通过
RuleFor链式调用构建可读、易维护的强类型验证规则。 - 内置验证器:涵盖字符串(NotEmpty、NotNull、Length、MinimumLength、MaximumLength、Matches、EmailAddress、CreditCard、Equal、NotEqual)、数值(GreaterThan、GreaterThanOrEqualTo、LessThan、LessThanOrEqualTo、InclusiveBetween、ExclusiveBetween、PrecisionScale)、集合(NotEmpty、NotNull、Must、ForEach)与比较(跨属性比较、NotEqual)等类别。
- 自定义验证器:可继承
PropertyValidator实现可复用组件,并按示例通过扩展方法以流式方式调用。 - 异步验证:通过
MustAsync执行数据库检查,例如名称唯一性、外键存在性。 - 嵌套与集合校验:使用
SetValidator校验嵌套对象,使用RuleForEach结合ChildRules校验集合元素,并可做跨元素校验(如去重、总价上限)。 - 条件验证:使用
When与Unless按条件启用或跳过规则。 - 与 MediatR 集成:通过管道行为实现命令/查询的自动验证。
使用方式
验证器通常放在 Application/{Feature}/Create{Entity}/ 等目录下,文件命名为 Create{Entity}CommandValidator.cs,也可内联在 Command 同一文件中。基本写法为继承 AbstractValidator<TCommand>,在构造函数中用 RuleFor 定义规则;自定义消息通过 WithMessage 指定。可复用验证器单独放在 Validators/ 目录。异步验证需注入仓储,将数据库查询放在 MustAsync 委托中。
适用场景
- 需要为 CQRS 命令与查询建立统一验证入口的 .NET 项目。
- 需要在应用层而非领域层进行输入校验的整洁架构项目。
- 需要复用验证规则(如地址、邮箱、电话)的多功能模块。
限制与注意事项
- 资料建议优先在 Handler 中做存在性检查,以更好地分离关注点并提升可测试性,异步验证应谨慎使用。
- 资料未提供具体安装命令、NuGet 包版本或与 MediatR 管道集成的完整代码,相关内容暂未提供。