Мы используем MediatR для реализации «Конвейера» для нашего внутреннего ядра WebAPI dotnet, пытаясь следовать принципу CQRS.
Я не могу решить, должен ли я попытаться реализовать цепочку IPipelineBehavior
или лучше создать новый запрос и вызвать MediatR.Send из моего метода Handler (для запроса).
Сценарий по сути такой:
- Пользователь запрашивает действие, которое нужно выполнить, т.е. удаляет что-то
- Мы должны проверить, используется ли это кем-то кем-тоиначе
- Мы должны отметить это что-то как удаленное в базе данных
- Нам нужно фактически удалить файлы из файловой системы.
Вариант 1 - это то, что мы имеем сейчас: DeleteRequest
, который обрабатывается одним классом, при этом обработчик проверяет, используется ли он, помечает ли он как удаленный, а затем отправляет новый TaskStartRequest
с параметрами для удаления.
Вариант 2 - это то, что я рассматриваю: A DeleteRequest
, который реализует интерфейсы маркеров IRequireCheck
, IStartTask
, с конвейером, который запускается:
IPipelineBehavior<IRequireCheck>
сначала проверьте, используется ли что-то, IPipelineBehavior<DeleteRequest>
, чтобы отметить что-то как удаленное в базе данных, и IPipelineBehavior<IStartTask>
, чтобы запустить задание.
Я не совсем понял, как будет выглядеть Вариант 2, но этоГлавная идея.
Полагаю, мне в основном интересно, пахнет ли код вызовом MediatR.Send (TRequest2) в обработчике для TRequest1.