Валидация данных в C# с помощью библиотеки FluentValidation

Валидация данных в C# с помощью библиотеки FluentValidation

Доброго времени суток! В данной статье мы рассмотрим с Вами как можно провести проверку введенных пользователем данных (валидацию) в C# с помощью библиотеки FluentValidation.

Итак, для начало необходимо создать консольный проект в среде Visual Studio, а после установить пакет FluentValidation через менеджер пакетов Nuget.

Теперь в файл программы Program.cs добавим следующий исходный код:


using System;
using System.Text.RegularExpressions;
using FluentValidation;

namespace C_Sharp_Validation_ConsoleApp
{
    // класс заказа, данные которого мы будем проверять
    // предполагается, что он заполнен из данных, введенных пользователем в некоторой форме
    // форма может быть представлена как веб- так и графическим интерфейсом
    class Order
    {
        // в данные свойства записываются значения пришедшие от пользователя
        public readonly string Id;
        public readonly string State;

        // конструктор класса, тело которого определено через лямбда-выражение
        public Order(string id, string state) => 
            (this.Id, this.State) = (id, state);

        public override string ToString() =>
            $"Order(Id={Id};State={State})";
    }

    // любой пользовательский валидатор должен быть унаследован 
    // от абстрактного класса  AbstractValidator<T>, где T - это тип класса, свойства которого мы будет
    // проверять на соответствие правилам (Rules)
    class OrderValidator : AbstractValidator<Order>
    {
        // правила валидации определяются в конструкторе класса
        public OrderValidator()
        {
            // правило для (RuleFor) свойства Order.Id (идентификатор заказа) - не должно быть пустым значением (NotEmpty)
            // минимальная длина значения должна составлять 10 символов
            // значение должно начинаться с подстроки id********
            RuleFor(order => order.Id).NotEmpty().MinimumLength(10).Matches(new Regex("^id.*"));

            // правило для страны заказа - просто не должно быть null значением
            RuleFor(order => order.State).NotNull();
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // создаем класс валидатора заказа
            var validator = new OrderValidator();

            // создаем тестовые заказы, первый верный, второй с ошибкой
            var user1 = new Order("id123456789", "USA");
            var user2 = new Order("321221212", "GB");

            // проводим тестирование
            ShowUser(user1, validator);
            ShowUser(user2, validator);
        }

        static void ShowUser(Order order,  OrderValidator validator)
        {
            // здесь бы берем объект заказа и проводим его валидацию
            var res = validator.Validate(order);

            // если после проверки нет ошибок
            if(res.IsValid)
            {
                Console.WriteLine($"Объект ({order}) не содержит ошибок");
            }
            else
            {
                // в противном случае, если есть ошибки  
                // просто выводим их в консоль
                foreach (var item in res.Errors)
                {
                    Console.WriteLine(item);
                }
            }
        }
    }
}

Таким образом, вот так просто с помощью C# библиотеки FluentValidation можно проверить данные на корректность, причем как видно из примера выше правила валидации добавляются одно за другим в соответствии с шаблоном Fluent Interface (Текучий интерфейс).

Источник

Shopping Cart