WCF Service 透過Service Contract提供服務的介面給Client端的應用程式使用。常常會有人問我,如果WCF Service的服務介面需要修改,應該要怎麼辦的問題。如果從元件的角度出發來看的話,介面修改相對的所有使用該元件的應用程式也都必須要跟著被修改,這對於可能會需要隨著企業邏輯做調整的WCF服務來說,會造成不小的影響
在繼續這個話題之前,先請大家思考一下,如果你家的電器插頭,每一種電器插頭的規格都不一樣的話,會是怎樣的世界?
從這樣的角度去思考的話,服務的介面規格當然是設計的越簡單越好。微軟所提供的Design Guideline中提到:
- Avoid tight coupling across layers.
- Design coarse-gained operations.
對於90%以上的服務來說,我們需要兩個基本的功能:
1. 執行指令並回傳運算結果或是錯誤資訊。
2. 確定目前服務是正常的。
根據這樣的出發點,我們可以設計出一個通用的WCF Service介面:
[ServiceContrract]
public interface ICommonService{
[OperationContract]
object Execute (string command, Dictionary<string,object> parameters, out string errorMessage);
[OperationContract]
bool Diagnostics ();
}
在這樣的介面設計之下,你的服務不管要增加多少功能,或是要減少功能,都不會需要更動到服務的介面規格,只需要支援新的command指令即可。但是需要注意的是,因為在這個服務介面規格中是使用object型別傳遞資料,因此你必須要另外再使用Data Contract宣告可序列化物件,然後透過ServiceKnownType將該物件定義加入WCF服務規格中。
沒有留言:
張貼留言