轉自:http://www.pcbookcn.com/article/1490.htm
Delphi5.5的MIDAS編程
數據庫應用程序中三個基本層:
l 數據層:負責存儲數據
l 業務層:負責從數據層獲取適當格式的數據並執行最後的合法性檢查(也叫做執行業務規則)。業務層也就是應用服務器層。
l 表示層:也叫做GUI層,負責在客戶應用程序中以適當格式顯示數據。總是與業務層打交道,不直接與數據層打交道。
Delphi下多層體系結構的優點:
1. 業務規則集中:業務規則放在應用服務器上
2. 瘦客戶體系結構:數據訪問由應用服務器來控制,數據表示則由客戶的應用程序完成。只需發佈客戶應用程序和一個用來訪問服務器的DLL文件。
3. 自動錯誤調和
4. 公文包模式:公文包打開數據模式,允許不必一直與應用服務器或數據庫服務器保持活動連接。
5. 容錯
6. 負載平衡:負載平衡的算法有隨機法、順序法、最少網絡用戶和最少網絡流量等。Delphi4及以上版本提供了一個順序法實現負載平衡的組件。
典型MIDAS體系結構:
窗體/數據模塊 遠程數據模塊(RDM)
客 戶 服 務 器 |
TdatasetProvider TDataset |
TclientDataset
TDispatchConnection |
一、 服務器
二、 客戶端
Delphi中用於連接客戶和服務器的是TdispatchConnection。通過它的AppServer屬性,可以調用服務器上自定義的方法。TdispatchConnection派生了幾個子類,分別有不同的連接特性:
1. TDCOMConnection:通過標準Windows服務,提供安全驗證的核心。對於intranet/extranet應用程序尤爲有用。就需要在中間層應用服務器配置DCOM的安全驗證,用dcomcnfg.exe。缺點有:
難於配置,主要是在跨route或網域,分佈也困難
不能很好兼容防火牆
在WIN95機器上要安裝DCOM95
2. TsocketConnection:易配置,只使用一個端口進行傳輸。必須運行ScktSrvr進行配置。Delphi4下要求安裝WinSock2,Delphi5下不使用回調,可以用WinSock1連接用戶。
3. TOLEnterprisdConnection:提供內嵌的容錯和負載平衡。進行容錯和簡單負載平衡的組件TsimpleObjectBroker。可把WIN9X作爲服務器。
4. TCORBAConnection:相當於DCOM的開放標準。
5. TwebConnection:允許MIDAS在HTTP或HTTPS上進行數據傳輸。限制有:
不支持回調
客戶必須安裝WININET.DLL
服務器端必須運行IIS4.0或Netscape3.6及以上版本
客戶端程序的編寫可以有多種方式:
1. 主窗體爲ActiveForm,調用其它普通窗體的方式。ActiveForm實際上也是一種ActiveX組件,它同時也是一個ActiveX的Container對象。這就是說它可以包含其它的組件。這樣我們就可以把普通的VCL控件加入到ActiveForm中。
ActiveForm的創建和發佈:
在Delphi中選New|ActiveX|ActiveForm
其中的Make Control Licensed選區項要注意,一般不選,否則ActiveForm在客戶端下載時就需要License,就是要把開發機器上的License文件拷貝到客戶端機器上。Include Version Information選項一般要選上,這樣客戶端在運行程序時就可以根據服務器上的版本號決定是否下載新的版本了。
創建並編輯完窗體後,就可以發佈了。首先要在服務器上安裝IIS,創建一個虛擬目錄,準備放ActiveForm發佈後生成的一些文件。選Project|Web deployment Options
這裏是發佈的各種設置。Targer dir是生成的一些文件存放在目錄,Targer URL是客戶機器訪問服務器的URL,HTML dir是生成的ActveForm訪問的主頁存放目錄。Use CAB file compression選項,選中時,ActveForm將打成CAB文件下載到客戶端,不選中時,將編譯成.OCX文件。Include file version number選項和創建ActveForm時一樣,指發佈時是否包含版本信息給客戶端比較。Auto increment release number選項,一般要選中,這樣程序每發佈一次就會把版本號自動增加。這樣客戶端就可以比較後下載新版本。Deploy additional files選中的話,發佈程序將包含Additional files頁中添加的其它文件,如MIDAS.dll。
這些設置好之後,就可以點Project|Web deploy發佈了。
有了一個ActiveForm,再通過ActiveForm調用普通的Form,就可以方便建立基於IE運行的application了。可在ActiveForm創建時,創建普通的窗體,再show出來,但這樣,Form是獨立在IE外的。如果創建同時,把Form的Parent設爲ActiveForm,並設Form.visibal:=true,這樣這個普通窗體就顯示在ActiveForm上了。當然最後不要忘了在ActiveForm的destroy事件,把Form釋放。通過這種方法,可以把任何普通的程序,轉變爲基於IE的應用程序。
使用ActiveForm爲主的應用程序時,應爲程序首次執行要下載ActiveForm,這樣在某些速度較慢的網絡上,要考慮ActiveForm文檔的大小是否可以接受。下載時間過長,可能會造成DCOM或Socket逾時的情況。可使用Package和CAB技術使文檔變小,但這畢竟有限。另外的辦法是,程序員分析和設計整個應用系統,把共享的應用程序邏輯編寫成企業對象,執行在應用程序服務器中,在ActiveForm下載後執行。但這樣如果頻繁調用大量數據,有時會降低執行效率,可能也難以接受。所以具體怎麼樣處理,最重要的是程序員的經驗和實驗。
2. 全部窗體都使用ActiveForm。ActiveForm不是直接調用,而是把要調用的ocx當作一個Internet鏈接來調用的。這種方式,客戶端要下載大量的ActiveForm,這在一般網絡上是難以接受的,所以很少採用。
3. 使用WEB方式。
因爲下載和執行效率的關係,ActiveForm並不適合使用在Internet上。但一般的ASP+角本語言,也只適合簡單查詢多層應用系統。現今最好的解決方法就是XML+角本語言(最好是JavaScript)+企業對象+中介軟件,能夠滿足電子商務應用的需要。
Delphi5提供功能強大的InternetExpress技術來開發分佈式Web應用系統。從客戶端到服務器到中介軟件都可以只用Delphi來開發,而且是基於XML的。
4. 普通窗體。必須安裝客戶端程序,無法達到客戶端免維護的要求,一般不採用。
參考文檔:
l 《delphi5.x分佈式多層應用系統篇》——李維
l 《delphi5.x分佈式多層應用電子商務篇》——李維
l 《delphi5開發人員指南》——Steve Teixeira Xavier Pacheco
l 一併感謝Internet上衆多優秀的DELPHI程序員們