首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-25 13:01
  • 4526
  • 7443
juejin.cn

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

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

为什么使用 FluentValidation?

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

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

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

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

验证器示例

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, 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 一起使用可提供一个强大、模块化且随时可安全扩展的结构,同时保证质量。

看完点个赞哥

注:本文转载自juejin.cn的CF14年老兵的文章"https://juejin.cn/post/7496021698959818790"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top