Хранилище должно быть независимым от кода фреймворка, это правда, и это хорошая практика, но вы также должны быть прагматичны, у меня был репозиторий, в котором я использовал Java-лямбду, которая является структурой уровня языка, на которую можно поспорить.
В чем выгода использования Flux или Mono и какова их реклама в качестве части интерфейса?Если их нет, вы можете сохранить детали реализации в реализации репозитория и освободить интерфейс от реактивных объектов.
Однако, если это должно охватить прикладной уровень до адаптеров портов, тогда я не будуНе вижу никаких проблем, помещающих их в определение интерфейса вашего репозитория.
При этом, возможно, вы захотите проверить другой подход: с CQRS и гексагональной архитектурой вы можете иметь лучшее из обоих миров:
- Наличие чистого интерфейса репозитория для команды (часть «Обновление и создание»)
Использование службы запросов (простой POJO, если вы находитесь в Java, определенном в пакете приложения), возвращаяMono или Flux для запроса (часть для чтения)
OrderApplicationService.java (здесь идет команда «Создать обновление для удаления с помощью команд») OrderQueryService.java (здесь идет часть для чтения)
Ваша прикладная служба содержит ссылку на ваш OrderRepository, служба запросов не использует респосциллографически, поскольку он запрашивает более непосредственную базу данных, например, через ReactiveMongoTemplate.
В моих службах запросов я использовал простые JDBC-шаблоны, например, при использовании Hibernate в реализации репозитория.