我正在开发一个具有六边形架构的 NodeJS 项目,但我对如何在数据库(MySQL 和 Redis)的实现中管理工作流有很大的疑问
MySQL实现:
- 我正在使用Sequelize ORM并且可以填充模型以获取关联(JOINs)。Sequelize 实现让我可以在一个模型中设置一些选项,以便将其他模型直接包含在它自己的存储库中。我不需要依赖第二个模型。
Redis 实现:
- 但是,使用 Redis,我需要单独查询所有资源。这个是正常的。无法关联模型,我必须转到第二个模型的存储库。这些操作应该在我假设的用例中完成。
例子:
MySQL实现顺序
1.1。GetContentsWithVideosUseCase -> 我创建了一个标准来获取所有内容加入它自己的视频
1.2. ContentRepository.findAll(criteriaForJoinVideos) -> 这里我已经有了每个内容及其视频。
1.3. GetContentsWithVideosUseCase -> 我不再需要,所以将它返回给控制器。
Redis 实现顺序
2.1。GetContentsWithVideosUseCase -> 我创建了一个获取所有内容的标准。
2.2. ContentRepository.findAll(criteriaContents) -> 这里我只有每个内容。
2.3. GetContentsWithVideosUseCase -> 我有内容,但现在我需要其中的视频。Contents.map 并按内容为每个视频查询创建标准。
2.4. VideoRepository.findAll(criteriaVideosByContent) -> 这里我已经有一个内容的视频。
2.5. GetContentsWithVideosUseCase -> 我现在拥有所有内容的所有视频,并且我编写了将返回的对象。
问题!
我们可以看到这里的问题是用例应该与实现不同并且不应该发生。
这种情况下的问题是什么是最佳和最正确的做法:
- 我是否应该独立执行所有 MySQL 查询(在各自的存储库中分隔它们)并留下 JOIN?
- 是否可以通过 Redis 实现保留 JOIN?
- 你有没有处理过这个问题?
谢谢!