1)從 Function 到 Service
一、從函數(shù)說起
我是 1993 年學習電腦的。學習的開發(fā)語言有三種:匯編、C、DbaseIII。
所以在我學習的時候,我并不了解面向?qū)ο蟮拇a架構(gòu)設(shè)計和代碼編程實現(xiàn)。所以要從字面上來區(qū)分函數(shù)和函數(shù)之間的關(guān)系,主要就靠函數(shù)命名、放在同一個代碼文件里、放在同一個代碼目錄文件夾里來區(qū)分他們之間的關(guān)聯(lián)性。
在當時函數(shù)時代,也沒啥異常保護、異常處理、異常日志的函數(shù)編寫基本原則,所以我們除了命名以外,主要注重的就是函數(shù)的輸入數(shù)據(jù)參數(shù)以及格式、輸出數(shù)據(jù)的參數(shù)以及格式。
二、面向?qū)ο?/strong>
我的面向?qū)ο笫怯?Object Pascal 開始的,但真正大量寫面向?qū)ο蟠a的時候是使用 Delphi,那已經(jīng)是 1996 年的事情了。
因為有了類這個東西,所以函數(shù)就可以物以類聚了。有的函數(shù)屬于私有函數(shù)只能這個類里面才能調(diào)用,有的函數(shù)屬于公有函數(shù)可以供外部調(diào)用。
但是我那時候使用類還很初級,往往是一個源代碼文件中就定義一個類。而且類也沒有使用繼承,也就是說我所有的類都是平行的,類和類之間通過 Public 型的公開函數(shù)調(diào)用才產(chǎn)生了關(guān)系。
三、面向接口
Delphi 這個開發(fā)語言是優(yōu)美的,它的定義申明和它的詳細實現(xiàn)是分離的。
業(yè)務(wù)功能進一步復雜起來了,過去沒什么太多關(guān)系的業(yè)務(wù)現(xiàn)在關(guān)系越來越緊密了,有些類和類之間的調(diào)用就太多了。我就想著重寫這塊代碼,把這兩個類進行合并了。但一重寫吧,需要動的東西太多了。
用繼承、用多重繼承的方法來做吧,太麻煩,總要在實現(xiàn)里寫一個空函數(shù)(就是沒有代碼但只有函數(shù)架子的,以備編譯器能語法通過)。后來認識了接口,就用接口定義了,就不使用空函數(shù)了,就定義,不實現(xiàn),編譯器照樣能通過。
四、面向組件
我是完整經(jīng)歷過面向組件時期的,并且用面向組件技術(shù)編寫過一整代完整的 ERP 引用套件。從 CORBA 技術(shù)到 COM/DCOM/COM+技術(shù)都嫻熟學習并使用過。我也是完整經(jīng)歷單機版本到 C/S 客戶端服務(wù)器端局域網(wǎng)版本到 C/S/S 三層架構(gòu)的。
一開始我用 DBaseIII 寫應(yīng)用,UI 開發(fā)、業(yè)務(wù)邏輯開發(fā)、數(shù)據(jù)庫開發(fā)都是一個開發(fā)語言搞定。
后來用 Delphi 寫 C/S 應(yīng)用,就用了 SQLServer 大型關(guān)系數(shù)據(jù)庫,在數(shù)據(jù)庫層就寫了不少存儲過程和定時 JOB 任務(wù)。但當時業(yè)務(wù)邏輯代碼和 UI 代碼都是運行在客戶端,所以這兩層之間的分離也并不清晰。
然后寫 C/S/S 三層架構(gòu),業(yè)務(wù)邏輯層獨立出來,而且是物理獨立部署,這樣客戶端代碼和業(yè)務(wù)邏輯層代碼就必須要徹底分開,不能不清不楚地混雜在一起了。在那個時候,我才開始大量使用精心的接口設(shè)計、對象設(shè)計。
因為有了獨立的業(yè)務(wù)邏輯層,那么這些代碼(接口/類)何時創(chuàng)建對象實例,何時釋放,這些對象實例要運行在哪個進程容器中,就有了要求了。因而就產(chǎn)生了組件容器和組件。組件容器來管理組件的全生命周期(安全、創(chuàng)建、并發(fā)訪問控制、休眠、激活喚醒、計數(shù)、摧毀釋放內(nèi)存),組件管理器就來管理組件的注冊、發(fā)現(xiàn)等。
所以《COM 本質(zhì)論》的作者 Don Box 說.NET 就是更好的 COM,我一下子明白了:對啊,微軟的意思是,以后所有的應(yīng)用都應(yīng)該運行在組件容器中,不管是單機應(yīng)用,還是 C/S 應(yīng)用,還是 C/S/S 應(yīng)用,每個應(yīng)用都要運行在組件容器中,由組件容器來屏蔽和管理內(nèi)存的創(chuàng)建與回收,不要把內(nèi)存的創(chuàng)建與釋放直接袒露給開發(fā)者,否則開發(fā)者技術(shù)能力水平不一,有的爛的程序員管理不好內(nèi)存,很容易就會使應(yīng)用占滿內(nèi)存并導致操作系統(tǒng)崩潰。
五、面向 WebService
哈哈哈,大家好像都沒聽說過面向 WebService,大家好像就聽過面向服務(wù)。
Web 互聯(lián)網(wǎng)興盛起來,HTML(UI 元素定義)+CSS(UI 元素風格定義)+JavaScript(UI 元素操作)構(gòu)成了前端技術(shù)。人們又從前端里分離出來 XML,成為數(shù)據(jù)容器。可以用 HTTP+80 端口進行傳輸純文本的 XML 數(shù)據(jù),也可以用 UDP、TCP/IP 等各種傳輸協(xié)議進行傳輸。當然,XML 還可以被壓縮以便更小尺寸在互聯(lián)網(wǎng)上傳輸(尤其過去互聯(lián)網(wǎng)速度很慢),還可以被加密不讓人中間截獲看到。這些就構(gòu)成了 WebService 的一個技術(shù)族。
我們現(xiàn)在要把局域網(wǎng)版本的 C/SS/三層技術(shù)架構(gòu),升級到 Web/S/S 三層技術(shù)架構(gòu),那怎么辦呢?