2011-09-29 21 views
2

我是DDD的新手,目前我嘗試重構一個項目以實現域驅動的體系結構。該項目有一個客戶端和一個服務器端(ASMX webservice)。現在我創建了一個名爲「Domain」的類庫,它由客戶端應用程序以及服務器引用。.NET:DDD和ASMX,避免代理類上的多個命名空間

現在我希望我的SOAP通信基於我的域模型。但正如你所知道的,一旦建立了Web引用,ASMX webservice就會在客戶端內創建一些代理類庫。
這導致在不同命名空間下具有兩次域實體和值對象。

  1. 是否可以直接使用域模型的通信和避免ASMX代理類的產生?

  2. 在DDD中如何使用DTO?如您所知,某些域部分可能不是可序列化的(例如NHibernate/IList用法),因此過去我經常創建更簡單的DTO版本的實體類。 在域中定義DTO實體是否是常用的做法?

+0

你會選擇哪種方案?你有沒有試過我的? –

回答

1

被覆蓋。如果你使用WCF,您可以在共享程序集中包含客戶端和服務器引用的服務接口和DTO類。將項目轉換爲使用WCF可能不會太難,但在開始之前還有很多學習要做。

共享接口組件僅僅是一個美好的理想,如果你想在客戶端和服務器是緊密結合,因此它不能很好地工作,除非兩側是由同一個團隊擁有。

經常試圖在服務器和客戶機上使用相同的類來傾向於設計問題,但是在適合設計時共享類會節省大量工作。

(對不起,我不認爲你可以使用ASMX共享的組件,它更從.NET歷史的遠程側的一個概念)

+0

謝謝。服務器和客戶都由我們的團隊擁有。不過,我現在不想遷移到WCF,儘管從長遠來看這應該是正確的方向。 關於WCF:我們的客戶端軟件堅持.NET 2.0,所以對於一些博客,我不得不使用BasicHTTPBinding。此綁定是否也支持使用通用的域庫? – mbue

+0

@mbue,您可以使用託管在IIS中的.net遠程處理(我已經在過去完成了這項工作,並且它運行良好,只要您控制兩端)我記得「Ingo Rammer」書籍對此非常有幫助。 –

0

這是不可能使用原始域模型(由-not一個WEB參比到域模型的引用獲得),用於與通信ASMX:必須使用由ASMX即露出的模型相似但不相同(即List在Array中轉換)。

這是可能的 - 和了解快速創建具有相同的命名空間許多Web服務的許多類
創建.BAT文件這樣

"C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe" /sharetypes /o:C:\code\MyProxy.cs /namespace:MyProxies http://website/FirstService.asmx http://website/SecondService.asmx 
Pause 


- "C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin\wsdl.exe"Wsdl.exe用使用相對路徑(它必須是你的電腦上)
- /sharetypes意味着你只想要1名稱空間輸出中
- /o:C:\code\MyProxy.cs.cs文件名稱將包含創建
的所有類 - /namespace:MyProxies命名空間創建
的所有類
- http://website/FirstService.asmx http://website/SecondService.asmx的是,你需要調用web服務的列表
- Pause意味着你想窗口的SHEL保持開放閱讀操作的反饋。



1)所有的指令必須在一行(不按Enter鍵); Pause在第二行。
2)如果/o:C:\code\MyProxy.cs將是您的解決方案的一部分,(我想是這樣),你使用源控制文件必須被檢查出通過Wsdl.exe用