В своем приложении решил использовать подход CQRS.
Приложение пишу на C# (ASP.NET Core). Для доступа к данным использую Dapper.
CQRS реализовал следующим образом:
ICommand - команда
ICommandHandler - обработчик команды
ICommandDispatcher - находит обработчик для команды.
Для обработчиков команд в будущем могут быть дописаны декораторы.
Все приложение разбито на модули, каждый из которых работает со своей БД.
Вопрос: как абстрагироваться от конкретной БД? Как быть с декоратором для транзакций? Напр. я напишу фабрику, которая будет возвращать соединение с БД. Но получается, что я у этой фабрики буду дважды просить соединение (в основном обработчике и в декораторе).
В самой команде у вас работы с БД не будет.
В диспетчере тоже.
Работа с БД будет в обработчике, но он и так будет реализован поверх абстракции, которой является Dapper. Нет?
Не знаком с C#, но декоратор разве не умеет прокидывать переданные ему параметры в декорируемую сущность?