2011-08-24 54 views
0

我有四個項目:
1.業務項目,定義我的項目的企業登錄。
2.定義合同界面和DTO的服務合同項目。
3.定義服務實現的服務實現項目。
4.使用服務的svc文件的Web應用程序。WCF合同知道域名

理論上:
答:合同項目應該沒有人蔘考。
B.服務實施應引用合同項目和域。 C.網絡應用程序應僅引用合同和實施項目。

我的服務是這樣的:

AccoundData GetAccount(AccountTypeEnum type); 

的問題是,AccountTypeEnum域中定義,從而使合同和Web應用程序應該有參考域。但是這就是我們正在努力以防止..那麼我怎樣才能防止「知道」域名的合同?

+3

WCF契約具有對您的域對象進行操作的方法 - 它怎麼可能不知道**域?!?!!? –

+0

@marc_s:合同只是一個接口而不是實現。來自域的結果存儲在數據傳輸對象上。因此,合同爲什麼要知道域名?如果知道的話,你也會強迫我們的項目知道域名。 – Naor

回答

2

在這種情況下,您的合同必須使用不同的枚舉/ DTO,您的服務實現必須在合同枚舉和域枚舉之間進行轉換。

+0

沒有任何其他解決方案,然後創建與服務之間的每種類型的DTO?它不認爲代碼重複?每當我改變枚舉 - 我將不得不改變枚舉的DTO。 – Naor

+0

如果你想要這樣嚴格的分離,你必須付出額外的努力到你的應用程序。我不知道自動DTO創建的工具 - DTO應該專門針對操作需求,所以您必須始終自己做。對於枚舉,你可以爲它們的創建創建T4模板,但它會更復雜,然後手動創建它們。如果您不想付出額外的努力,將您的合同項目與您的服務實施項目合併。 –

+0

如何爲Enum DTO創建創建T4模板?我試圖搜索谷歌,但沒有關於T4和枚舉的信息。 – Naor