如果我们考虑一个标准的持久性存储库,那么解决方案很简单。我们将 IStuffRepository 放在领域层,将 StuffRepositoryImplementation 放在基础设施层。
但是,当我们想要包装第三方 API 时,好的模式是什么?
我们可以应用相同的模式,在域层有一个 IStuffGateway,在基础设施层有一个 StuffGatewayImplementation。
但是这种方法存在一个问题。当我们考虑持久层时,我们可以控制我们持久化的数据。但是当我们考虑第三方API时,我们没有控制权,这意味着我们可以尝试拥有一定的接口签名,但它必须受到我们包装的内容的影响。因此,如果我们更改实现(将第三方替换为另一个),接口签名可能会更改,并且域也会更改。
另一种方法可能是将接口移到域外,并将其放入基础设施层,并带有它的实现。这样,应用层就可以毫无问题地使用它(并保持域完整)。但是这种方法从域中删除了重要的概念,从我的角度来看,这似乎很糟糕。
对此有参考意见吗?