2010-01-07 65 views
6

在WCF/SOAP世界中處理多態業務對象的正確方法是什麼?WCF對象設計 - OOP vs SOA

在我看來,SOA和OOP是在相互爭執 - 以露出清潔WSDL你需要具體的對象,通常甚至沒有利用繼承。另一方面,大概在底層系統中,您將需要遵循適當的OO設計。

人們通常在這裏做些什麼?構建一組WCF合約對象,放棄OOP原則,然後轉換爲實際邏輯層中的另一組對象並從中轉換出來?

回答

6

什麼人通常在這裏做?構建一組WCF合約對象,放棄OOP原則,然後轉換爲實際邏輯層中的另一組對象並從中轉換出來?

是的。

WCF序列化的東西最終造成了很大的限制上,你可以和不能與合同對象做什麼的方式。你做不到的事情最終會變成「最有用的東西」。

我發現它使事情,如果你認爲WCF的合同的更清晰的對象只是一個數據傳輸機制。基本上像強/靜態類型的XML。
而不是你的業務對象轉換爲XML字符串(和回來),你轉換業務對象的WCF合同對象(和回來),但它在這個題目,否則類似

+0

所以你會添加一個'.ToWCFDataContract()'方法和一個接受你的WCFDataContract對象到你的業務對象的構造函數? – Nate 2010-01-07 20:21:23

+0

非常感謝。 想到我必須創建另一組對象(這不是一個小服務,至少可以說),這有點令人沮喪,但現在我知道在那裏沒有更好的選擇,我不會感覺到就像我在浪費時間。 – mdryden 2010-01-07 20:54:21

+0

@Nate:非常好,是的 – 2010-01-08 02:06:02

2

閱讀托馬斯·爾庫後,我來到了以下結論:

的WCF合同/ SOAP消息作爲一個簡單的消息認爲,服務用於通信(不紮緊,要在對象你的代碼)。

然後,您可以使用OOP來設計一個代碼庫,該代碼庫使用常見的OOP技術正常處理這些消息。

0

您使用一個抽象(接口類型)註釋與WCF屬性爲了定義您的服務合同。

這既取決於抽象,其根據OOP,以及定義一個服務端點,這是SOA。

一般來說,如果你發現你用的依賴性越來越業務對象,你應該考慮拉這種依賴到服務業務層,而不是依賴注入的業務對象。 然後,服務業務層將充當一個調解器,既作用於WCF服務代理也作用於業務對象。而不是讓業務對象作用於WCF服務代理。

0

所有偉大的評論!我會將我的投票添加到您的服務方向和麪向對象之間的調解適配器的概念。我也喜歡Thomas Erl的方法,在他的服務模式中他介紹了「應用程序服務」和「商業服務」的概念。這些是您的特定應用程序/業務環境(即面向對象和麪向組件的框架/ API)的集成點。這種方式應該爲您的企業框架大師帶來更好的可組合性和能力。