[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实做』,不应该将他单纯看成切割相依性的『接口』。
期許自己~
能以更簡潔的文字與程式碼,傳達出程式設計背後的精神。
真正做到「以形寫神」的境界。