CodeShot
Leadسختی 4 از ۵· در 45٪ مصاحبه‌های این حوزه پرسیده شده

Pipeline Behavior در MediatR چیست؟

نشان کردن

پاسخ کوتاه

یک لایهٔ میانی که قبل/بعد از اجرای هر Handler به‌طور خودکار اجرا می‌شود — مثل Validation یا Logging مشترک برای همهٔ Commandها/Queryها.

پاسخ کامل

به‌جای نوشتن کد اعتبارسنجی یا لاگ‌گیری در هر Handler به‌طور جداگانه، یک IPipelineBehavior<TRequest, TResponse> تعریف می‌شود که برای همهٔ Requestها (یا زیرمجموعه‌ای از آن‌ها) اجرا می‌شود.

مثال کد

public class ValidationBehavior<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
    public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next, CancellationToken ct)
    {
        // اعتبارسنجی با FluentValidation قبل از رسیدن به Handler
        return await next();
    }
}

نکته مهم

ترتیب اجرای چند Behavior قابل تنظیم است و در DI Container ثبت می‌شود.

اشتباه رایج

❌ تکرار کد اعتبارسنجی/لاگ در تک‌تک Handlerها به‌جای استفاده از یک Pipeline Behavior مشترک.