FluentValidation 条件验证实战指南:5种高效用法让业务逻辑更智能
【免费下载链接】FluentValidation 项目地址: https://gitcode.com/gh_mirrors/flu/FluentValidation
FluentValidation 是.NET生态中功能强大的数据验证库,其条件验证功能让开发者能够根据特定业务场景灵活应用验证规则。通过When、Unless等条件方法,你可以构建智能的验证逻辑,只在特定条件下执行验证,让代码更加简洁高效。🚀
1️⃣ 基础条件验证:When方法
最基本的条件验证使用When方法,只有当条件为true时才执行验证规则。比如对于VIP客户才需要验证折扣信息:
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0)
.When(customer => customer.IsPreferredCustomer);
这种单一规则的条件验证适用于简单的业务场景,代码直观易懂。
2️⃣ 反向条件验证:Unless方法
Unless方法与When相反,当条件为false时才执行验证:
RuleFor(customer => customer.Photo)
.NotEmpty()
.Unless(customer => customer.IsGuestUser);
3️⃣ 多规则共享条件
当多个规则需要共享相同条件时,可以使用顶层的When方法:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
RuleFor(customer => customer.CreditCardNumber).NotNull();
});
这种方式避免了重复的条件判断,提高了代码复用性。
4️⃣ 条件分支:Otherwise方法
FluentValidation 支持完整的条件分支逻辑,类似于if-else结构:
When(customer => customer.IsPreferred, () => {
RuleFor(customer => customer.CustomerDiscount).GreaterThan(0);
}).Otherwise(() => {
RuleFor(customer => customer.CustomerDiscount).Equal(0);
});
[](https://link.gitcode.com/i/870ff9969318776e35814ef0ba56ddf6)
## 5️⃣ 精确条件控制
默认情况下,条件会应用于同一`RuleFor`调用中的所有前置验证器。如果需要精确控制条件的作用范围,可以指定`ApplyConditionTo.CurrentValidator`:
```csharp
RuleFor(customer => customer.CustomerDiscount)
.GreaterThan(0).When(customer => customer.IsPreferredCustomer, ApplyConditionTo.CurrentValidator)
.EqualTo(0).When(customer => !customer.IsPreferredCustomer, ApplyConditionTo.CurrentValidator);
🎯 最佳实践建议
- 性能优化:FluentValidation 会自动缓存共享条件的执行结果,避免重复计算
- 代码组织:复杂的条件逻辑建议使用单独的验证器类
- 可读性:为复杂条件命名,使用描述性的变量名
通过这5种条件验证用法,你可以构建出既灵活又高效的验证逻辑,完美适应各种复杂的业务需求。FluentValidation 的条件验证功能让你的应用更加智能和健壮!💪
源码参考:ConditionBuilder.cs | AbstractValidator.cs
【免费下载链接】FluentValidation 项目地址: https://gitcode.com/gh_mirrors/flu/FluentValidation
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



