MVC 应用程序中使用 FluentValidation 进行验证的重要性

当我们开发 Web 应用程序时,特别是那些处理诸如医疗咨询系统中敏感数据的注册和处理的应用程序时,确保这些数据的完整性和一致性至关重要。在 ASP.NET 中实现这项任务的最优雅且有效的方法之一是通过 FluentValidation 库。

在本文中,我将展示如何在我的 ASP.NET MVC 应用程序中使用 FluentValidation 来验证医生的注册信息,以及这种方法为项目带来了哪些好处。

为什么使用 FluentValidation?

FluentValidation 是.NET 生态系统中一个流行的库,它允许以流畅、简洁且与控制器或模型逻辑分离的方式定义验证规则。它促进了代码更加组织有序、可重用且易于维护。

与直接在视图模型(ViewModel)中使用数据注释(DataAnnotations)不同,我们可以将业务规则集中在一个单独的类中,遵循单一职责原则(SRP),并有利于依赖注入,便于进行单元测试和未来的维护。

它在我的应用程序中是如何应用的

在我的医生管理应用程序中,我实现了一个 AdicionarMedicoValidator 类来验证在尝试向系统中添加新医生时发送的数据。这个类继承自 AbstractValidator<T>,并为视图模型的字段定义了清晰的规则。

验证器示例

csharp 复制代码
public class AdicionarMedicoValidator : AbstractValidator<AdicionarMedicoViewModel>
{
    public AdicionarMedicoValidator(SisMedContext context)
    {
        RuleFor(x => x.CRM).NotEmpty().WithMessage("CRM 是必填项")
            .MaximumLength(20).WithMessage("CRM 最多只能有 {MaxLength} 个字符。")
            .Must(crm =>!context.Medicos.Any(m => m.CRM == crm)).WithMessage("此 CRM 已被使用。");

        RuleFor(x => x.Name).NotEmpty().WithMessage("姓名是必填项")
            .MaximumLength(200).WithMessage("姓名最多只能有 {MaxLength} 个字符。");
    }
}

在 Program.cs 中注册验证器

为了让 FluentValidation 自动识别验证器,只需在依赖注入容器中注册它们即可:

csharp 复制代码
    builder.Services.AddScoped<IValidator<AdicionarMedicoViewModel>, AdicionarMedicoValidator>();

在控制器中的使用

在 MedicosController 中,在保存数据之前显式调用验证:

csharp 复制代码
    [HttpPost]
    [ValidateAntiForgeryToken]
    public IActionResult Adicionar(AdicionarMedicoViewModel dados)
    {
        var validacao = _adicionarMedicoValidator.Validate(dados);

        if (!validacao.IsValid)
        {
            validacao.AddToModelState(ModelState, string.Empty);
            return View(dados);
        }

        var medico = new Medico
        {
            CRM = dados.CRM,
            Name = dados.Name
        };

        _context.Medicos.Add(medico);
        _context.SaveChanges();

        return RedirectToAction(nameof(Index));
    }

这种方法清晰地分离了职责:

  • 视图模型仅表示数据。
  • 验证器定义规则。
  • 控制器协调操作。

这种方法的好处

  • 便于维护:验证规则集中在一个地方。
  • 可重用性:同一个验证器可以在应用程序的不同部分使用。
  • 易读性:流畅的语法使代码更具表现力且易于理解。
  • 可测试性:可以通过单元测试单独测试规则。

结论

FluentValidation 是一个强大的工具,可确保进入您应用程序的数据是有效、一致且安全的。在更复杂的系统中,例如医疗保健专业人员管理系统,这种验证对于避免重复、不一致或关键故障变得更加重要。

将其与 ASP.NET MVC 一起使用可提供一个强大、模块化且随时可安全扩展的结构,同时保证质量。

看完点个赞哥

相关推荐
CCblandy7 小时前
前缀缓存命中率不靠引擎靠排列:本机仿真 3 轮,易变字段放开头 98.0%→0.0%
人工智能·python·算法·自然语言处理·性能优化
2401_885885048 小时前
国际语音C#接口怎么写?.NET环境下实现国际语音验证码批量下发
开发语言·c#·.net
努力实干9 小时前
第 4 课:MVC、MVP 与 MVVM 架构
架构·mvc
Random Glow9 小时前
聚簇索引 vs 二级索引:回表、覆盖索引、索引下推
数据库·mysql·性能优化·innodb·1024程序员节·索引优化
1-1=012 小时前
.NET Core 本地化 (L10n)
.net·.netcore
Random Glow13 小时前
一条 SQL 从输入到返回,中间经历了什么
数据库·后端·mysql·性能优化·innodb·1024程序员节
Linux实战笔记14 小时前
GraphQL vs REST API 设计实测:灵活查询与性能权衡逐项对比
性能优化·graphql·rest api·1024程序员节·dataloader·n+1 查询
余槐i14 小时前
开虚拟线程后接口反而更慢:JDK 21 synchronized 锁住载体线程的排查
java·spring boot·redis·mysql·性能优化
1-1=014 小时前
.NET Core 健康检查
.net·.netcore·1024程序员节
波力海苔夹心脆67515 小时前
C# string 字符串方法大全:判空、查找、截取、分割、替换一篇讲透
经验分享·c#·.net·字符串·string·入门教程