为外部 Restful API 编写存储库

问题描述

我正在学习 DDD,但对一个特定问题感到困惑。在我的有界上下文中,我有用例需要我从外部 API 获取数据。我知道它是 API 还是数据库并不重要,我们只是为实体创建存储库并在基础设施层抽象实现。

问题是我从外部 API 检索的数据类型没有保存在我的数据库中的任何地方。

我所做的是遵循

Application Layer
   SyncListingsUseCase
Domain Layer
   ListingEntity
   PosListingEntity
Infrastructure Layer
   PosListingRepositoryHTTP
   ListingRepostorysql

我从 PosListingRepositoryHTTP 的应用层中的 RestAPI 获取 POSListing,然后将其一些属性与从 ListingsRepositorysql 检索的 ListingsEntity 同步并保留 Listing Entity。

你看到我的本地没有 PosListingEntity 所以我的问题是如果我没有将它保存在我的本地数据库中,我是否仍然可以创建一个映射到外部系统的实体?

解决方法

正如顾虑所定义的那样,存储与域的映射方式无关。域到基础设施的表示是受尊重层的关注点。如果您想使用 HTTP 检索一些数据,而通过 SQL 检索一些数据,那么结果应该是一个系统可识别的对象,应用程序层和域层可以与之交互。您绝对可以跨不同系统获得持久性。

在大多数具有云自管理数据库的分布式系统中,数据实际上是通过 TCP 套接字连接检索的。所以即使你使用 HTTP 来检索数据,它也几乎与在上面的网络糖相似。