Я разрабатываю проект NodeJS с гексагональной архитектурой, но у меня есть большие сомнения относительно того, как управлять рабочим процессом в реализациях баз данных (MySQL & Redis)
MySQL реализация:
- Я использую Sequelize ORM , и можно заполнять модели, чтобы получить ассоциации ( JOINs ). Реализация Sequelize позволила мне настроить некоторые параметры в одной модели, чтобы включить другую модель непосредственно в собственный собственный репозиторий . Мне не нужна зависимость от второй модели.
Реализация Redis:
- Однако в Redis мне нужно запрашивать все ресурсы отдельно . Это нормально. Невозможно связать модели, и мне нужно от go до хранилища второй модели . Эти действия должны быть выполнены в предполагаемом случае использования.
Пример:
MySQL последовательность реализации
1.1. GetContentsWithVideosUseCase -> Я создаю критерии для получения всего содержимого, объединяющего собственные видео
1.2. ContentRepository.findAll (attributeForJoinVideos) -> Здесь у меня уже есть каждый контент с его видео.
1.3. GetContentsWithVideosUseCase -> Мне больше не нужно, поэтому верните его в контроллер.
Последовательность реализации Redis
2.1. GetContentsWithVideosUseCase -> Я создаю критерии для получения всего содержимого.
2.2. ContentRepository.findAll (attributeContents) -> Здесь у меня только каждый контент.
2.3. GetContentsWithVideosUseCase -> У меня есть содержимое, но теперь мне нужны видео из них. Contents.map & создать критерии для каждого запроса видео по содержанию.
2.4. VideoRepository.findAll (attributeVideosByContent) -> Здесь у меня уже есть видео для одного контента.
2.5. GetContentsWithVideosUseCase -> Теперь у меня есть все видео для всего содержимого, и я составляю объект, который будет возвращен.
Вопрос!
Мы видим, что проблема заключается в том, что сценарий использования должен быть различаются в зависимости от реализации, и это не должно происходить.
Вопрос с этим сценарием, какова лучшая и наиболее правильная практика:
- Должен ли я выполнять все запросы MySQL независимо (разделяя их по соответствующим репозиториям) и оставляя JOINs?
- Можно ли сохранить JOINs с реализацией Redis?
- Вы когда-нибудь имели дело с этим?
Спасибо !