Был ли опыт использования библиотеки Mediator
Что проверяют
Знаете ли вы, зачем в проект добавляют посредника, и понимаете ли его цену. Интервьюер почти всегда уточняет, что вы делали через pipeline behaviors и не превратился ли проект в клубок обработчиков, вызывающих друг друга.
Как отвечать
Скорее всего, речь про MediatR, самую распространённую реализацию в .NET. Каркас ответа из личного опыта:
- зачем взяли: разделить команды и запросы в духе CQRS, разгрузить контроллеры и толстые сервисы, дать каждому сценарию свой обработчик;
- как устроено: запрос реализует
IRequest<TResponse>, обработчикIRequestHandler<TRequest, TResponse>, вызов идёт черезISender.Send, события черезINotificationиIPublisher.Publish. Регистрация:services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<Program>()); - сквозная логика:
IPipelineBehavior<TRequest, TResponse>для валидации через FluentValidation, логирования, транзакций, замера времени. Это главная практическая польза; - что мешало: переход к определению ведёт на интерфейс, а не на обработчик, и навигация по коду усложняется.
Назовите свой проект, число обработчиков, какие behaviors писали сами. Процентов «ускорения разработки» не придумывайте: их никто не мерил, и это слышно.
Стоит знать про лицензию: в 2025 году автор перевёл новые версии MediatR на коммерческую модель с лицензионным ключом, прежние версии остались под Apache 2.0. Поэтому часть команд перешла на библиотеку Mediator на source generators или отказалась от посредника совсем.
Если опыта не было, так и скажите, а затем покажите понимание: опишите паттерн, сравните с обычным внедрением сервисов и декораторами через Scrutor и объясните, в каком проекте взяли бы его.
Где спотыкаются
Путают MediatR с шиной сообщений. Он работает внутри процесса: нет очереди, повторов и гарантии доставки, для этого берут MassTransit или Wolverine.
Вызывают Send из одного обработчика в другой. Зависимости прячутся, и граф вызовов виден только в отладчике.
Не знают, как работает Publish: по умолчанию обработчики уведомлений выполняются последовательно, и исключение в одном не даст отработать следующим.