C#
 Computer >> コンピューター >  >> プログラミング >> C#

FluentValidationとは?C#での導入方法と基本的な使い方を解説

FluentValidationとは

FluentValidationは、.NET向けの強く型付けされたバリデーション(検証)ルールを構築するためのライブラリです。流暢なインターフェース(Fluent Interface)とラムダ式を活用して検証ルールを記述できるのが大きな特徴で、ドメインコードをすっきりと整理し、凝集度の高い設計を実現できます。また、検証ロジックを一箇所にまとめられるため、保守性も大幅に向上します。

パッケージのインストール

FluentValidationを使用するには、まず以下のNuGetパッケージをプロジェクトに追加します。

<PackageReference Include="FluentValidation" Version="9.2.2" />

サンプルコード

ここでは、PersonModelという人物情報クラスに対して、氏名や生年月日などの検証ルールを定義する例を紹介します。AbstractValidatorを継承したPersonValidatorクラスを作成し、RuleForメソッドを使って各プロパティの検証条件を宣言的に記述しています。

static class Program {
   static void Main (string[] args) {
      List errors = new List();

      PersonModel person = new PersonModel();
      person.FirstName = "";
      person.LastName = "S";
      person.AccountBalance = 100;
      person.DateOfBirth = DateTime.Now.Date;

      PersonValidator validator = new PersonValidator();
      ValidationResult results = validator.Validate(person);

      if (results.IsValid == false) {
         foreach (ValidationFailure failure in results.Errors) {
            errors.Add(failure.ErrorMessage);
         }
      }
      foreach (var item in errors) {
         Console.WriteLine(item);
      }
      Console.ReadLine ();
   }
}

public class PersonModel {
   public string FirstName { get; set; }
   public string LastName { get; set; }
   public decimal AccountBalance { get; set; }
   public DateTime DateOfBirth { get; set; }
}

public class PersonValidator : AbstractValidator {
   public PersonValidator(){
      RuleFor(p => p.FirstName)
      .Cascade(CascadeMode.StopOnFirstFailure)
      .NotEmpty().WithMessage("{PropertyName} is Empty")
      .Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
      .Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");

      RuleFor(p => p.LastName)
      .Cascade(CascadeMode.StopOnFirstFailure)
      .NotEmpty().WithMessage("{PropertyName} is Empty")
      .Length(2, 50).WithMessage("Length ({TotalLength}) of {PropertyName} Invalid")
      .Must(BeAValidName).WithMessage("{PropertyName} Contains Invalid Characters");

   }

   protected bool BeAValidName(string name) {
      name = name.Replace(" ", "");
      name = name.Replace("-", "");
      return name.All(Char.IsLetter);
   }
}

コードのポイント

  • Cascade(CascadeMode.StopOnFirstFailure):最初の検証エラーが発生した時点で、そのプロパティの以降のチェックを停止します。無駄な検証を省き、ユーザーに表示するメッセージを絞り込めます。
  • NotEmpty()・Length():空文字チェックや文字数範囲の指定など、よく使われる検証を簡潔に記述できます。
  • Must(BeAValidName):カスタム検証メソッドを組み込み、名前に含まれる文字がすべて英字であることを確認しています。

実行結果

上記のコードを実行すると、FirstNameが空であること、LastNameが1文字で長さの制約(2〜50文字)に違反していることが検出され、コンソールに以下のエラーメッセージが出力されます。

First Name is Empty
Length (1) of Last Name Invalid

このようにFluentValidationを使えば、検証ルールをモデルクラスから分離し、読みやすく再利用性の高い形で管理できます。ASP.NET Coreなどと組み合わせれば、フォーム入力の自動検証にも簡単に組み込めるため、実務でも広く活用されています。

  1. LVFSとは?Linuxでファームウェア更新を行う方法を徹底解説

    Linuxを日常的に使うデスクトップOSとして採用する場合、考慮すべき点は数多くあります。使用したいハードウェアのドライバーが用意されているか、必要なソフトウェアが利用可能か、さらに企業環境で主流となっているActive Directoryなどのセキュリティ管理機能との互換性があるかなど、事前の確認が欠かせません。 しかし、見落とされがちな重要な要素がもう一つあります。それが「ファームウェア」です。ファームウェアとはハードウェアのためのソフトウェアであり、ドライバーを通じてソフトウェアがやり取りできる設定やオプションのことを指します。ファームウェアの更新は本当に重要なのでしょうか?Linux

  2. Steamワークショップとは?使い方を徹底解説|Modのダウンロード・削除方法まで

    Steamワークショップは、ゲームプラットフォーム「Steam」に組み込まれたコミュニティ機能の一つです。ユーザーやコンテンツ制作者が、お気に入りのゲーム向けに制作したコンテンツを自由にアップロード・ダウンロードできる場として運営されています。対応しているアイテムは多岐にわたり、Mod(改造データ)、アートワーク、スキン、マップなどが含まれます。Steamワークショップへのアクセス方法Steamワークショップには、Webブラウザから「Steamコミュニティ ワークショップページ」にアクセスして利用する方法と、Steamクライアント内で「コミュニティ」タブから「ワークショップ」を選択して開く方法