我正在开发一个六边形架构的 NodeJS 项目,但我对如何管理数据库(MySQL 和 Redis)实现中的工作流有很大的疑问
MySQL 实现:
Redis实现:
例子:
MySQL实现顺序
1.1. GetContentsWithVideosUseCase -> I create a Criteria for get all Contents joining its own Videos
1.2. ContentRepository.findAll(criteriaForJoinVideos) -> Here I already have each content with its videos.
1.3. GetContentsWithVideosUseCase -> I doesn't need anymore so return it to controller.
Redis实现顺序
2.1. GetContentsWithVideosUseCase -> I create a Criteria for get all Contents.
2.2. ContentRepository.findAll(criteriaContents) -> Here I only have each content.
2.3. GetContentsWithVideosUseCase -> I have contents but now I need videos from them. Contents.map & create criteria for each query of videos by content.
2.4. VideoRepository.findAll(criteriaVideosByContent) -> Here I already have videos for one content.
2.5. GetContentsWithVideosUseCase -> I have now all videos for all contents & I compose the object which will be returned.
问题!
我们可以看到这里的问题是用例应该因实现而异,而这不应该发生。
这种情况下的问题是什么是最佳和最正确的做法:
谢谢!
最佳答案
Redis 应该被压缩为一个步骤。应在其存储库中进行检索其视频内容并将其返回到您的域服务所需的所有查询。
六边形架构假设您的 db 是一个细节,因此您的域服务不关心 db 是否支持关系。您不在乎内部进行了多少查询,直到性能低下,但这是另一回事。
重要的一点是存储库应该是每个 AggregateRoot 或每个实体。
关于mysql - 六边形架构的 MySQL(加上 Redis)上的单查询或 JOIN 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59858031/