2011-01-09 61 views
0

我需要一些幫助來說明我應該如何設置我的項目。我的解決方案結構如下:從WCF服務訪問領域驅動的設計類LIbraries

Company.DataTransferObjects 
--AdminDTO.cs 
--CustomerDTO.cs 
Company.DataTransferObjects.Helpers 
Company.Infrastructure.DomainServices 
--Admin 
---AdminService.cs 
--Customer 
--CustomerService.cs 
Comapny.Infrastructure.Repositories 
--Admin 
---AdminRepository.cs 
--Customer 
---CustomerRepository.cs 
Company.Domain 
--Admin 
---Admin.cs 
---IAdminRepository.cs 
--Customer 
---Customer.cs 
---ICustomerRepository.cs 
Company.WebServices 
--WebApi.cs 
--IWebAPI.cs 

我的問題如下:

1)請問我的建立右看看你嗎?

2)DTOs。從Web服務的角度來看,應該在哪裏創建DTO? 我應該在獨立的類庫中創建DTO,並從WebService中引用 ,還是應該將它們作爲我的Web服務項目的一部分?

此外,我不清楚我的DTO應該如何與我的Domain對象進行交互。 有人可以從程序流程的角度解釋他們的目的,特別是,如果你正在創建一個WCF服務,你將如何操縱它們?

3)域服務。我仍然很難包圍域服務的目的。這是什麼暴露了未達到數據庫的操作功能,並且需要無法直接訪問的存儲庫方法? 換句話說,域服務是一種操縱多個存儲庫方法的方法嗎?所以,如果我的WCF服務正在調用可以通過存儲庫方法訪問的數據,那麼它應該這樣做。但是,如果它需要數據是多個存儲庫方法的結果,那麼這應該通過域服務完成?

4)Facade Pattern適用於DDD架構的位置?

請原諒我的困惑,我想明白。如果你能告訴我「我應該從我的WCF服務訪問什麼」,這將是一個嚴重的幫助。

謝謝!

回答

0

去按相反的順序對您的問題:

4)你的Web服務是一個門面到您的域名,有效。

3)域服務也可以訪問數據庫,它們通常是消費代碼應該用於與涉及多個單一實體的任何事情對話的主要API,或者代表一系列事務性腳步。有些人認爲存儲庫是域服務的一個特例(而不是一個或兩個)。我通常認爲我的服務是我的域的公共接口。 2)當你(或計劃最終)越過物理邊界時,DTO通常是有用的。無論何時您認爲您可能需要序列化某些內容(例如,將其轉換爲SOAP消息),您都需要考慮DTO。就你的情況而言,你的WCF項目將使用DTO作爲其DataContracts,但在內部它可能會使用你的域對象(除非你期望你的域位於不同的應用域或不同的物理框中)。

1)這一切都是個人偏好;你的佈局看起來並不合理,儘管它與我平常組織的不同。

+0

謝謝保羅。那麼,我的WCF項目是否會引用我的域服務或我的域(或兩者)? – 2011-01-09 21:11:31