[Chatter] 用WebService做軟體分層

[Chatter] : 用WebService做軟體分層


跟朋友聊天,得知他們公司採用 WebService來做軟體架構的分層。
這在軟體架構上是對的,但執行時容易有一些些的偏差。


1. 提供資訊的伺服器端,WebService的 Function直接撈資料庫回傳。
   WebService裡面的 Function做的事只是建立資料連線+取資料,這樣其實只是把 Stored Procedures寫在程式碼內。
   就本質來說還是『撈資料+排版顯示』的資料庫導向系統,只是把『撈資料』這一段從 Sql改成 WebService而已。
   WebService使用的時機,應該是『軟體系統提供給其他系統使用的服務』。
   這邊軟體系統的定義是指有自己 Domain know how的系統,然後開放功能給其他系統操作、讀取。


2. 取得資訊的客戶端,在要取資料的地方直接呼叫 WebService。
   系統內充斥一堆 new XxxWebService(),整個系統跟 WebService緊密的綁在一起。
   當要抽換資訊提供者的時候,只能從遠端 WebService來做抽換的動作。
   軟體系統應該將跟外部系統的連接做切割,將他獨立出一層類似 DAL的層級。
   軟體系統是相依於自己的 DAL介面,然後再注入實作DAL介面的 WebService物件。


3. 提供資訊的伺服器端,直接使用Visual Studio專案產生的 WSDL。
   因為 Visual Studio能自動產生WSDL,每次修改功能就是重新建立一份新的 WSDL。
   當再有另一個人也依照 WSDL開發,有異動的時候很容易造成 WSDL有差異。
   WSDL應該獨立於專案外,多組開發人員參照同一份 WSDL來寫功能。


4. .....


這邊再次強調,使用 WebService來做軟體架構的分層是對的。
本篇文章是就執行時,容易有一些些的偏差來做討論。


最後,
以這篇『.NET 的應用程式架構:設計應用程式和服務』來說。
WebService所處的位置應該是UI層、DAL層,在中間的應用程式邏輯層是不該有WebService出現的。
基本上應該將 WebService看成是『介面+Proxy實做』,不應該將他單純看成切割相依性的『介面』。

期許自己
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。