2010-09-08 77 views
6

我有一個數據合同說用戶。它是可序列化的並穿過電線。我想要一個Operation Contract SaveUser()。我可以將SaveUser(用戶用戶)保留在我的服務合同中作爲操作合同。但是,我可以將它作爲自己的行爲保存在我的數據合同中嗎?WCF數據契約可以在其中包含WCF操作契約嗎?爲什麼?

保存()應理想地保存自己。所以按照面向對象的原則,每一份數據合同都應該知道如何自救,細節應該從外部世界中抽象出來。

這是可能的WCF?

回答

9

我會說不,並且正確如此。 儘管我同意你關於面向對象的原則和封裝,WCF處理SO(面向服務)原則。 從CD播放機和CD的角度考慮這一點。 CD播放器是服務。 CD是數據合同。面向對象原則會要求CD具有Play方法以便能夠自己演奏。但是,播放CD還有許多事情要比了解數據。有電子設備,輸出插口的接口等,這些都是由CD播放器...服務提供的。 因此,這就是爲什麼你的服務合同有Play方法,並接受CD作爲數據契約,告訴它玩什麼(而不是如何玩)。

在你的評論問題後編輯: 沒有肯定(希望)不是。最糟糕的情況是你將有34份服務合同,每份平均有6種方法。如果你確信每個類的每個方法都必須作爲服務操作發生,那麼情況就是如此。有兩個方面需要考慮。方面1:您的服務設計。您應該將34個班級分組爲一個有意義的分組,而不是34個服務合同,併爲每個組創建一個服務合同。例如,您最終可能會有一個InventoryManagement服務,一個SalesOrderProcessing服務和一個BackOfficeOperations服務。這些服務中的每一個都包含與分組到其域中的類範圍相關的服務操作(和數據合同)。方面2:客戶端正在發生什麼。我提到你必須考慮每個類的方法是否必須是WCF服務操作。在客戶端上擁有豐富的完全封裝的業務類別肯定有一種情況。在他們的操作不需要作爲服務操作執行的地方,這些操作在客戶端域中執行其邏輯。問題在於如何通過服務將它們傳遞給客戶端,在這裏您有兩種選擇:a)在客戶端上實例化一個實例,並從服務操作返回的DataContract中填充它的屬性。 b)直接從服務操作返回對象,就像在CSLA框架中完成的那樣(我認爲DevForce遵循類似的方法通過WCF服務返回業務類)。 HTH

+1

所以如果我在每個類中平均有6個公共方法的34個類,我會在服務中使用204個包裝方法嗎?這個可以嗎? – 2010-09-08 11:12:40

+0

好的回答...非常有幫助清除我的疑惑。 – Pranav 2013-06-17 09:18:59

相關問題