我正在從Web服務遷移到WCF,而不是試圖讓舊的代碼在WCF中工作,我只是要重建服務。作爲這個過程的一部分,我還沒有想出提供易於使用的服務並支持未來變化的最佳設計。WCF數據對象最佳實踐
我的服務遵循以下模式;我實際上有比這更多的方法,所以重複代碼是一個問題。
<ServiceContract()>
Public Interface IPublicApis
<OperationContract(AsyncPattern:=False)>
Function RetrieveQueryDataA(ByVal req As RequestA) As ResponseA
<OperationContract(AsyncPattern:=False)>
Function RetrieveQueryDataB(ByVal req As RequestB) As ResponseB
<OperationContract(AsyncPattern:=False)>
Function RetrieveQueryDataC(ByVal req As RequestC) As ResponseC
End Interface
跟着this意見,我首先創建了Request和Response對象的模式。然後,我使用SvcUtil創建了結果類,以便我確信對象可以被其他語言消耗,並且客戶端會發現模式易於使用(不引用其他模式)。但是,因爲請求和響應具有相似的數據,所以我想使用接口和繼承,這樣我就不會實現相同代碼的多個版本。
我曾想過在獨立的類庫中使用接口和繼承編寫我自己的類的版本,並在那裏實現所有的日誌記錄,安全性,數據檢索邏輯。在每個操作中,我只需將RequestA轉換爲我的InternalRequestA並調用InternalRequestA的處理函數,該函數將返回一個InternalResponseA。然後我會將其轉換回ResponseA併發送給客戶端。
這個想法是瘋了嗎?!?我在尋找另一種利用內部繼承的解決方案時遇到問題,但仍然爲支持未來更新的客戶端提供乾淨的架構。
我接受了你的答案,因爲對大多數人來說它是正確的。在我的情況下,我想我會繼續進行對象轉換,因爲它允許我只需要執行一次執行的開銷任務,而且必須執行每種類型的請求。 – 2011-03-28 17:09:19