CodeShot
FluentValidation1 دقیقه مطالعه

FluentValidation چیست؟

کتابخانه‌ای برای نوشتن قوانین اعتبارسنجی (Validation) با یک Fluent API خوانا، کاملاً جدا از خود مدل یا DTO.

چرا مهم است؟

با جدا نگه‌داشتن قوانین Validation از مدل، یک مدل می‌تواند در سناریوهای مختلف (مثلاً ثبت در برابر ویرایش) قوانین متفاوتی داشته باشد، بدون شلوغ‌شدن خود کلاس مدل با Attributeهای پراکنده.

تعریف یک Validator

public class CreateOrderValidator : AbstractValidator<CreateOrderCommand>
{
    public CreateOrderValidator()
    {
        RuleFor(x => x.CustomerId).NotEmpty();
        RuleFor(x => x.Amount).GreaterThan(0)
            .WithMessage("مبلغ باید بزرگ‌تر از صفر باشد.");
    }
}

ادغام با ASP.NET Core / MediatR

builder.Services.AddValidatorsFromAssembly(typeof(CreateOrderValidator).Assembly);
// معمولاً به‌عنوان یک Pipeline Behavior در MediatR اجرا می‌شود، قبل از رسیدن به Handler

تفاوت با Data Annotations

Data Annotations (مثل [Required]) قوانین را مستقیم روی خود کلاس مدل می‌گذارد؛ FluentValidation قوانین را در یک کلاس کاملاً جدا نگه می‌دارد که تست‌نویسی مستقل از آن و تعریف چند Validator متفاوت برای یک مدل را ساده می‌کند.

اشتباه رایج

❌ قرار دادن منطق کسب‌وکار پیچیده (مثلاً بررسی موجودی انبار با پرس‌وجو از دیتابیس) داخل Validator — Validator باید فقط شکل و صحت ورودی را بررسی کند؛ قوانین کسب‌وکار واقعی جایشان داخل Domain/Handler است، نه لایه Validation.

خلاصه

FluentValidation قوانین اعتبارسنجی را با یک Fluent API خوانا و کاملاً جدا از کلاس مدل تعریف می‌کند، برخلاف Data Annotations که روی خود مدل قرار می‌گیرند. معمولاً به‌عنوان Pipeline Behavior قبل از رسیدن Request به Handler اجرا می‌شود. منطق کسب‌وکار پیچیده نباید داخل Validator نوشته شود.

این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←