如何设计一个写入 pub/sub 并在干净的架构中从数据库读取的存储库

How to design a repository writing to pub/sub and reading from database in clean architecture

我想设计我的应用程序,它需要通过 pub/sub 异步写入并从数据库同步读取。你如何在干净的架构中实现它?有一个单独的进程从 pub/sub 读取并写入数据库。

我正在考虑这样的设计;但是,我不确定使用单独的持久性基础设施来实现一个存储库是否是一个好的设计来进行读取和写入。

  Repository   |     Controller   |    Infrastructure
my repository ---> my controller ---> (write) pub/sub
                                  \-> (read)  database

另一种可能是 CQRS,但就我而言,我使用相同的模型进行读取和写入,因此我认为最好使用单一模型。

背景: 写入我的应用程序非常灵活,而读取是一致的。因此,我通过异步编写来避免让我的服务过载。

谢谢!

它与任何其他干净架构应用程序相同。

+------------+  ||  +----------+      +------------+
| Controller | ---> | Use Case | ---> | Repository |
+------------+  ||  +-----------      +------------+
                ||                    | save()     |
                ||                    | find()     |
                ||                    +------------+
                ||                          ^
============================================|==========                               
                                            |
                                      +------------+
                                      |  RepoImpl  |
                                      +------------+
                                      | save()     | ---> write to pub/sub
                                      | find()     | ---> read from db
                                      +------------+

也许您将存储库写入和读取拆分为不同的接口,因为您可能有一个只读的用例和另一个只写的用例。 我通常应用接口隔离原则并定义用例特定接口。