第一部分:幾種典型的應用程序模型
應用程序是什麼,簡單的來說,它是人類客觀世界的問題領域在計算機世界的解決方案。我們生活的客觀世界復雜多樣,計算機世界也是博大精深,怎樣從普遍的意義上來表述應用程序是一個非常有用的課題。應用程序的編程模型,也就是應用程序的拓撲結構,是一門關於應用程序的科學。從事軟件設計、軟件開發的人員,如果能夠就應用程序的編程模型有足夠的重視,將受益匪淺。
引言
簡單介紹應用程序編程模型的發展過程,以及我們常用的幾種應用程序編程模型。通過對多個模型的表述加深人們對編程模型的概念,為下面進一步描述Web應用模型打下基礎,
1、應用程序的基本功能單元
組成應用程序的功能代碼及其資源,按照其在應用程序中的功能,可以簡單分解成為三個部分:用戶界面(User Interface),事務邏輯(Business Logic)和數據存取(Data Access)。應用程序的基本功能單元如圖1所示。
圖1、應用程序功能分解
2、幾種典型的編程模型
隨著計算機技術的發展和應用的深入,應用程序的編程模型在不斷的演化,先後出現了:單層應用模型(monolithic);兩層客戶/服務器應用模型(two-tier client/server);多層應用模型(multitier client/server); 分布式系統;基於Web的多層應用模型(web-based multitier client/server)。
單層應用模型
早期為大型機編寫的應用程序,沒有將應用程序三個組成部分分開,即沒有將用戶界面、事務邏輯和數據存取分開。這種體系結構跟當時的計算機水平和應用狀況有一定的聯系,當時的用戶通過啞終端來共享大型機資源,啞終端沒有任何處理能力,所有的用戶界面、事務邏輯和數據存取功能都是在大型機上實現,這樣當時使用單層體系結構而沒有出現多層體系結構是合理的。單層的應用程序結構見圖2所示。
圖2、單層的應用程序模型
兩層客戶/服務器應用模型
PC機的出現對應用程序模型的發展帶來了巨大的推動力,這時出現了客戶服務器模式的應用程序,即應用程序的代碼和資源被明確的劃分為客戶端和服務器端。因為PC機有了一定的處理能力,傳統在大型機上實現的的用戶界面和部分事務邏輯被移到PC機上運行(我們將這種PC機端的代碼稱為應用程序客戶端),而大型機則提供部分事務邏輯處理和數據存取的功能(我們將這種大型機端的代碼稱為應用程序服務器端)。隨著PC機處理能力在逐漸加大,客戶端執行的任務逐漸增多,這時對服務器端的硬件要求也在逐漸的降低。
根據事務邏輯在客戶端和服務器端分配的不同,該種模型有圖3所示幾種形式。
圖3、兩層客戶/服務器應用模型的三種形式
需要值得注意的是,客戶/服務器應用程序常常體現為客戶端和服務器端運行在不同的計算機上,但這並不是必然的要求,在同一台計算機上同樣可以實現客戶/服務器應用程序。
多層客戶服務器應用模型
兩層應用程序模型的出現極大的增加了應用程序的靈活性,同時也帶來應用程序可維護性的提高。但是,在兩層應用程序中仍然存在著不便維護的缺點,客戶端的邏輯或是客戶端的嵌入SQL極有可能隨著數據庫的改變或是事務邏輯的變化而變化,不得不重新實現並發布一個新的客戶端,也就是說,這樣的應用程序模型仍然是比較脆弱的。三層或是更多層應用模型的出現,解決了這樣的問題。
在三層的應用程序模型中,事務邏輯與用戶界面和數據存取明顯的分離出來,將客戶端的用戶界面與服務器端數據存取隔離開來,極大的改善了應用程序的可維護性。
注意,雖然最常用的多層客戶/服務器模型是三層模型,但是,現在已經出現了將事務邏輯層和數據存取層增加的趨勢。這種更多更細的分層不但提高了系統的維護性能,同時也增加了系統的重用性和與分布式系統概念融合的可能性。
圖4所示為一個典型的三層模型:
圖4、三層客戶/服務器應用模型
分布式系統
在分層的客戶/服務器應用模型中,下一層為上一層提供服務,上一層調用下一層提供的服務,這不利於功能的重用。為了最大限度的發揮系統的功能,分布式系統打破分層系統中對於客戶和服務器的定義,將應用程序的代碼實現分解為遵循某個標准規范的對象,這些對象中提供的功能被封裝到接口中。在某個具體的服務邏輯中,一個對象可能充當客戶端的功能,它需要調用另一個對象提供服務;但是,在另一個服務邏輯中,同一個對象可能為另一個對象提供服務,充當服務器的功能。
常見的分布式對象規范有COM/DCOM、CORBA、Java RMI等。
分布式系統模型如圖5所示。
圖5、分布式系統模型
基於Web的多層應用模型
WWW的發展,使得Internet的應用不再局限於提供一些靜態的內容、甚至也不滿足於提供一些簡單的動態內容。傳統以獨立的軟件包形式發布的一些應用程序,正逐漸被搬上Internet,以出租服務的方式提供給用戶,這就是ASP(Application Service Provider)。由於Web的特點是Internet 上的HTTP,是一種請求應答式的無連接的服務形式,所以這種基於Web的應用程序在體系結構上有其獨特的特點。
圖6、基於Web的多層應用模型
3、下一種編程模型是什麼?
從SUN的Jini技術、微軟的Microsoft.net技術可以看出,應用程序模型正在超越目前的水平。比如,目前的分布式應用系統不得不遵循某個接口規范和實現,如RMI、CORBA、DCOM等等,這在一定程度上限制了系統的擴展性。為了解決這個缺點,微軟正在開發一種基於HTTP、XML的構件自解析的網絡服務構件標准。