如果我們考慮一個標準的持久性存儲庫,解決方案很簡單。我們將IStuffRepository放入域層,並將StuffRepositoryImplementation放入基礎設施層。DDD - 第三方API接口應該在哪裏?
但是,當我們想要包裝第三方API時,什麼是好模式?
我們可以應用相同的模式,在域層中有一個IStuffGateway,在基礎設施層中有一個StuffGatewayImplementation。
但是這種方法存在問題。當我們考慮持久層時,我們控制着我們堅持的數據。但是當我們考慮第三方API時,我們沒有任何控制權,這意味着我們可以嘗試擁有特定的接口簽名,但它必須受到我們正在包裝的內容的影響。所以如果我們改變實現(用另一個替換第三方),接口簽名可能會改變,並且域會被改變。
另一種方法是將接口移到域外,並將其放入Infrasture Layer中,並將其實施。這樣,應用層就可以毫無問題地使用它(並保持域不變)。但是這種方法從域中刪除了重要的概念,從我的角度來看這似乎很糟糕。
有關此參考的任何意見?
當第三方持久性發生變化時,您會做什麼?你去找股東並解釋他們的業務需要改變嗎? –
當然不是。持久性是一個實現細節。但是第三方API提供者並不總是隻有實現細節。例如,如果一家企業將FedEx API包裝爲自動化部分運輸,那麼這是股東所關注的事情。如果由於某些商業原因他們切換了提供商,那麼以某種方式影響域名是正常的。即使有反腐敗層,與第三方API相關的一些關鍵概念(如確認編號,SKU等)可能會泄漏到域中。 –
看來你的域名確實取決於一些第三方API。在這種情況下,我不知道定義&取決於'接口'是否有幫助,因爲細節很重要(並且接口刪除了一些細節)。 –