爲了讓我的應用程序正常工作,我需要定期同步來自外部服務的數據(可能是API或簡單的文本文件,但現在它是一個API)。ddd - 應該在哪裏與遠程API同步?
因爲這需要一次創建/更新許多實體,所以我需要創建一個域服務。但是,我還需要創建一些將包含遠程API響應的DTO?
這個邏輯應該去哪裏?如果我有以下目錄結構:
Domain -
Model - // my set of entities and repository interfaces are here
....
Synchronization -
RunSynchronizationService.php // domain service
Application
Synchronization -
SynchronizeData.php // application service
SynchronizationDataSourceInterface.php // used by application service
MySpecificRemoteApiDataSource.php // this implements the interface above
SynchronizationDataSourceResponse.php // this would be returned by each call of SynchronizationDataSourceInterface method, and would contain data normalized, but not validated.
Infrastructure -
MyConcreteImplementationOfModelEntityRepository.php
而當我想以同步數據,我smply調用應用程序\同步\ SynchronizeData的同步方法,至極將採取的具體實現SynchronizationDataSourceInterface的,調用它的方法,並驗證在將它們傳輸到Domain \ Model \ Synchronization \ RunSynchronizationService之前返回的SynchronizationDataSourceResponse對象?
或者我應該刪除RunSynchronizationService(域服務)並讓應用程序服務(SynchronizeData.php)在同步過程的每個步驟創建/更新域實體?
我可能是錯的,但我在這裏聞到一些過度工程。我的第一個建議是在一個(子)包中隔離同步。我的第二個建議是,爲什麼不從一個小型服務開始,讓它在以後更好地理解其作用時讓它發展。 –
@IhorBurlachenko問題在於同步過程相對較大。我必須從API獲取並驗證每個實體5到10個響應,並且至少有700個 – Lucio
然後我會隱藏Synchronization(子)包中的所有細節。我不會把任何東西放在領域層。如果我理解正確,同步與域沒有關係,但只是您的應用程序如何處理數據。 –