0Pricing
C# Academy · Урок

Правила FluentValidation

Пишите выразительные валидаторы с помощью цепочного синтаксиса.

«Правила FluentValidation» — бесплатный урок C# Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C# Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C# Academy содержит 4 уроков всего.

Зачем нужен FluentValidation

FluentValidation — популярная библиотека .NET, которая переносит правила проверки из моделей в отдельные классы валидаторов. Правила выражаются с помощью понятного API с цепочками вызовов, благодаря чему модели остаются чистыми, а правила удобно тестировать.

dotnet add package FluentValidation
dotnet add package FluentValidation.DependencyInjectionExtensions

Базовый класс AbstractValidator

Чтобы написать валидатор, унаследуйте его от AbstractValidator<T>, где T — проверяемая модель. Правила определяются в конструкторе.

using FluentValidation;

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        // rules go here
    }
}

Определение первого правила с помощью RuleFor

RuleFor выбирает свойство через лямбда-выражение, после чего к нему можно присоединить цепочку валидаторов. NotEmpty() отклоняет значения null, пустые строки и значения по умолчанию.

public class CustomerValidator : AbstractValidator<Customer>
{
    public CustomerValidator()
    {
        RuleFor(c => c.Name).NotEmpty();
    }
}

Объединение нескольких валидаторов в цепочку

Для каждого RuleFor можно объединить в цепочку несколько валидаторов. Они выполняются по порядку, и все должны пройти проверку. Такая запись почти читается как предложение.

RuleFor(c => c.Name)
    .NotEmpty()
    .MinimumLength(2)
    .MaximumLength(50);

Встроенные валидаторы

FluentValidation поставляется со множеством валидаторов: NotNull, NotEmpty, EmailAddress, Length, InclusiveBetween, GreaterThan, Matches (регулярное выражение) и другими.

RuleFor(c => c.Email).NotEmpty().EmailAddress();
RuleFor(c => c.Age).InclusiveBetween(18, 120);
RuleFor(c => c.Phone).Matches(@"^\+?[0-9]{7,15}$");

Пользовательские сообщения об ошибках

Используйте WithMessage, чтобы заменить сообщение по умолчанию. Можно подставлять значения в шаблоны с помощью заполнителей, например {PropertyName} и {PropertyValue}.

RuleFor(c => c.Email)
    .NotEmpty().WithMessage("Email is required.")
    .EmailAddress().WithMessage("{PropertyValue} is not a valid email.");

Пользовательские коды ошибок и уровень важности

Помимо сообщения можно добавить машиночитаемый код с помощью WithErrorCode и указать уровень важности через WithSeverity (ошибка, предупреждение, информация), чтобы клиенты могли по-разному реагировать на результаты.

RuleFor(c => c.Name)
    .NotEmpty()
    .WithErrorCode("NAME_REQUIRED")
    .WithSeverity(Severity.Error);

Проверка вложенных объектов

Используйте SetValidator, чтобы повторно использовать валидатор для дочернего объекта и сохранить правила модульными.

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleFor(o => o.Customer).SetValidator(new CustomerValidator());
    }
}

Проверка коллекций

RuleForEach применяет правила к каждому элементу коллекции.

public class OrderValidator : AbstractValidator<Order>
{
    public OrderValidator()
    {
        RuleForEach(o => o.Items)
            .ChildRules(item => item.RuleFor(i => i.Quantity).GreaterThan(0));
    }
}

Ручной запуск валидатора

Вы можете напрямую вызвать валидатор и проверить результат. ValidationResult предоставляет IsValid и список Errors.

var validator = new CustomerValidator();
ValidationResult result = validator.Validate(customer);

if (!result.IsValid)
{
    foreach (var error in result.Errors)
    {
        Console.WriteLine(error.PropertyName + ": " + error.ErrorMessage);
    }
}

Асинхронная проверка

Если для правила требуется ввод-вывод, например обращение к базе данных, используйте ValidateAsync и асинхронные валидаторы, такие как MustAsync, которые мы рассмотрим в уроке о пользовательских правилах.

ValidationResult result = await validator.ValidateAsync(customer);

Быстрая проверка

Проверьте свои знания основ FluentValidation.

Итоги

FluentValidation размещает правила в классах AbstractValidator<T>. RuleFor выбирает свойство, после чего можно объединить в цепочку встроенные валидаторы, такие как NotEmpty, EmailAddress и InclusiveBetween. Настраивайте обратную связь с помощью WithMessage, WithErrorCode и WithSeverity, повторно используйте логику с помощью SetValidator и RuleForEach, а запускайте правила через Validate/ValidateAsync.

Часто задаваемые вопросы

Урок «Правила FluentValidation» бесплатный?

Да — полный текст урока «Правила FluentValidation» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C# Academy, подпишись на CoddyKit PRO. Курс C# Academy содержит 4 уроков всего.

Чему я научусь в уроке «Правила FluentValidation»?

Пишите выразительные валидаторы с помощью цепочного синтаксиса. Ты практикуешь C# Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C# Academy?

Предыдущий опыт не требуется. C# Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Правила FluentValidation»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C# Academy?

Да. Каждый урок C# Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Проверка с помощью аннотаций данных
  2. Правила FluentValidation
  3. Пользовательские и условные правила
  4. Интеграция проверки с API
← Назад к C# Academy