淺析多層結構及其在Delphi中的實現
時間:2022-05-26 07:55:00
導語:淺析多層結構及其在Delphi中的實現一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
二層結構的退出
在傳統的二層C/S結構數據庫應用中,客戶端的機器執行應用程序,連接到后端的數據庫服務器中存取應用系統所需資料,因為應用系統的企業邏輯都編寫在客戶端的應用程序中,造成客戶端非常臃腫,且當應用系統需求改變時,所有在客戶端的應用程序都必須改變,使維護成本太高。
Oracle
MSQL
客戶端1數據庫服務器Sybase等
圖一2層C/S結構
1.2多層結構的概念和特點
為了解決這些問題,多層結構應用體系應運而生,即在傳統的二層C/S模型中放入應用程序服務器。應用程序服務器簡單地說就是一個包含企業邏輯的應用程序,開發人員以一種特定的組件形態,如MicrosoftCOM/DCOM,CORBA對象,或EnterpriseJAVABean等,封裝企業邏輯的程序代碼,這種經過封裝,能夠執行特定企業功能的對象被稱為“企業對象”,把這些企業對象分發到應用程序服務器中,開發人員在開發應用程序時就可以使用這些企業對象提供的服務。
多層結構的典型是三層結構,其基本思想是把用戶界面與企業邏輯分離。整體結構如圖二所示。
客戶端應用程序服務器遠程數據庫服務器
(提供用戶界面)(包含企業邏輯)(Oracle,MSQL,Sybase等DBMS)
圖二三層結構模型
(1)客戶端應用程序。提供用戶接口,主要功能是指導操作人員使用界面,輸入數據,輸出結果,并不具有企業邏輯,或只擁有部分不涉及企業核心的、機密的應用邏輯。這樣客戶端就顯的很廋,稱為“廋”客戶。
(2)應用程序服務器。它是應用的主體,包含了企業中核心的及易變的企業邏輯(規劃,運作方法,管理模型等),其功能即接受輸入,處理后返回結果。
(3)遠程數據庫服務器。即數據庫管理系統(DBMS),負責管理對數據的讀寫和維護。
在更復雜的多層體系結構中,“廋”客戶與遠程數據庫服務器之間可以加入更多的中間服務器,如加入一個中間安全服務器或中間轉換服務器,用于對不同平臺數據進行處理。
分布式多層結構把整個應用系統的執行分成數個不同部分并且執行在不同的機器中。其中應用程序服務器作為中間層集中實現企業邏輯,協調多層之間的請求,并掌握數據集定義的全部細節和遠程數據庫服務器進行通信,這樣客戶端應用程序就重點放在顯示數據和與用戶交互上,客戶端應用程序甚至都不需要知道數據在那兒。
具體來說,多層結構具有如下優點:
(1)在一個共享的中間層封裝了企業邏輯,不同客戶端應用程序可以共享同一個中層層,而不必由每個客戶端應用程序單獨實現企業邏輯。
(2)客戶端應用程序可以做的很廋。因為很多復雜的工作由應用程序服務器代勞,客戶端應用程序只需關注用戶界面本身?!皬C”客戶端應用程序更易、安裝、配置和維護。
(3)實現分布式數據處理。把一個應用程序分布在幾個機器上運行,可以提供應用程序的性能,通過冗余配置還可以保證不會因為局部故障導致整個應用程序崩潰。
(4)有利于安全。將一些敏感數據功能部分封裝在中間層,并授予不同訪問權限,可以保證對數據的訪問限制。
1.3多層結構使用的技術。
目前分布式多層結構使用的核心大致可以分為兩種不同的工業標準,即Microsoft制定的COM/DCOM/COM+和由700多家廠商共同提倡的CORBA。因分布式結構的廣泛流行,現也有愈來愈多的根據這兩種分布式核心技術加以演進而產生的分布式技術,如EJB(EnterpriseJavaBean)等。
Microsoft的COM/DCOM/COM+是以Windows為中心的開發環境,CORBA是平臺中立的分布式技術,CORBA能夠執行于Windows,UNIX以及Linux等操作系統中。這些技術都能使開發人員在應用程序中輕易地使用企業對象所提供的服務。這兩種分布式技術都在客戶端機器中以一個特別的對象來仿真真正的遠程應用程序服務器上的企業對象,這樣客戶端應用程序就可以調用在客戶端機器中的仿真對象,該對象再使用特定的通訊協議來真正調用遠程應用服務器上的企業對象,從而調用遠程企業對象的服務,以滿足客戶端的要求。
2在delphi中實現基于MIDAS的多層結構
2.1在Delphi中多層結構的實現
在Delphi中多層結構的基礎是MIDAS(Multi-tierDistributedApplicationServiceSuite,多層分布式應用服務器組)技術。MIDAS是一些不同技術的集合,無論是應用程序服務器還是客戶端,MIDAS技術需要DBClient.dll和MIDAS.dll的支持,這兩個動態鏈接庫用于管理數據包,MIDAS應用程序時需要這個文件。
基于MIDAS的多層結構依然分為客戶端應用程序,應用程序服務器和遠程數據庫服務器,如圖三所示。
從圖三可見,MIDAS的數據庫應用程序需要一些特殊組件,這些組件共分為4類:
(1)遠程數據模塊。位于服務器端,作為COM服務器或CORBA服務器讓客戶端應用程序訪問它的接口。
數據模塊IAppServer接口遠程數據模塊
客戶端應用程序應用程序服務器遠程數據庫服務器
圖三MIDAS結構
(2)DataSetProvider組件。位于服務器端,提供IAppServer接口,客戶端應用程序通過
IAppServe接口獲得數據。
(3)連接組件。位于客戶端,包括DCOMConnection,SocketConnection,CORBAConnection,
OLEnterpriseConnection,MIDASConnection和RemoteServer等連接組件,為客戶端應用程序定位應用程序服務器和IAppServe接口。
(4)ClientDataSet組件。位于客戶端,訪問服務器端的IAppServe接口,它是從TdataSet繼承下來的組件。
客戶端應用程序通過IAppServe接口與應用程序服務器通訊,通訊協議為DCOM,TCP/IP,HTTP,OLEnterprise和CORBA。通訊協議因客戶端的MIDAS連接組件及應用程序服務器上的遠程模塊不同而不同。
2.1.1客戶端應用程序結構
在結構上,客戶端應用程序通過標準數據控制組件與用戶交互,但是它是通過應用程序服務器提供的IAppServe接口獲得數據,也是通過IAppServe接口更新數據。所謂“廋”客戶即指不依賴BDE的數據集(TClientDataSet組件)構成的客戶端應用程序。TClientDataSet組件是從TDataSet派生出來的客戶端數據集組件,它扮演了與TTable或TQuery同樣的角色,但它不需要BDE,它把通過IAppServe接口獲得的數據在客戶端內存中建立副本,對數據進行操作。直接訪問遠程數據庫服務器的是應用程序服務器。
遠程數據模塊說明
RemoteDataModule支持雙重接口的自動化服務器,支持DCOM,TCP/IP或OLEnterprise協議。
MTSDataMoudle支持雙重接口的自動化服務器,創建的應用程序服務器是動態鏈接庫,支持DCOM,TCP/IP或OLEnterpris協議。
CORBADataMouduleCORBA服務器,支持CORBA協議
在客戶端,MIDAS連接組件非常重要,不同連接組件使用不同的通訊協議,如表一所示。
連接組件通訊協議
DCOMConnectionDCOM
SocketConnectionTCP/IP
WebConnectionHTTP
OLEnterpriseOLEnterprise
CORBAConnectionCORBA
表一MIDAS連接方式表二支持MIDAS的數據模塊
2.1.2應用程序服務器
應用程序服務器的關鍵部件是遠程數據模塊,在遠程數據模塊上,TTable,TQuery等BDE數據集組件通過BDE與遠程數據庫服務器連接訪問數據庫,DataSetProvider組件輸出IAppServer接口,DataSetProvider組件通過DataSet屬性與數據集組件相連,這樣客戶端通過IAppServer接口就可以訪問數據。
Delphi支持三種類型的遠程數據模塊,如表二示。
2.2用MIDAS創建多層結構數據庫應用程序實例
建立多層結構應用系統,必須先建立應用程序服務器,并運行注冊之,再建立客戶端。下面就以筆者創建的一個三層結構為例來介紹用Delphi實現三層結構的步驟。(假設在應用程序服務器上已設好BDE連接,連到遠程數據庫服務器。)
2.2.1建立應用程序服務器。(在應用程序服務器上建立)
(1)使用File菜單下的NewApplication建立一個新應用程序。
(2)創建遠程模塊。使用File菜單下的New打開NewItems對話框,在Multitier選項下,雙擊RemoteDataModule,設置Classname為rdm,Instancing及ThreadingModule屬性取默認值。
(3)在該遠程模塊上放一個Query1(Tqueyr組件),DatabaseName屬性中指定為要訪問的數據庫,如“出版社”。在該遠程模塊上再增加一個DataSetProvider1(TDataSetProvider組件),DataSet屬性設為Query1,Options屬性中令poAlloCommandtext為true。(設為true,則客戶端應用程序中TClientDataSet的屬性commandtext中的SQL語句就可以通過IAppServer接口傳遞。)
至此,應用程序服務器已創建完畢,運行該應用程序服務器在系統中注冊它,在應用程序服務器上運行ScktSrvr.exe文件,這樣今后客戶端程序就可以調用該應用程序服務器。
2.2.2創建客戶端應用程序。(在客戶端機器上創建)
(1)建立數據模塊。使用File菜單下的NewApplication建立一個新應用程序。在NewItem中雙擊DataModule建立一個數據模塊(命名為dm),在該模塊上放一個連接組件SocketConnection1(TsocketConnection組件),其IP屬性中指定應用程序服務器的IP地址,在Port屬性中取默認值211,在ServerName屬性中設置應用程序服務器(在這里,應用程序服務器就是上面創建的名為rdm的應用程序服務器。),這樣就可以定位應用程序服務器和IAppServer接口。在dm數據模塊上再增加一個ClientDataSet1(TClientDataSet組件),其RemoteServer屬性設為SocketConnection1,ProviderName為DataSetProvider1。保存該unit為dm。
(2)創建用戶界面。使用File菜單下的NewForm新建一個unit,在該unit中引用上面建立的數據模塊單元dm。在用戶界面Form上添加DataSource1(TdataSource組件),其DataSet
屬性設為dm.ClientDataSet1,即上面數據模塊中的客戶端數據集組件。添加一個DBGrid1(TDBGrid組件),DataSource屬性設為DataSource1。添加一個Btton1組件,caption屬性為“查詢”,其click事件中程序代碼為:
procedureTForm1.Button1click(sender:Tobject);
begin
withdm.ClientDataSet1do
begin
close;
commandtext:=’select*from書’;
open;
end;
end;
至此該三層結構已創建完畢,保存運行客戶端應用程序,點擊查詢按鈕(即Btton1按鈕),則客戶端應用程序將激活應用服務器程序,通過IAppServer接口把dm.ClientDataSet1中的SQL語句傳到Query1,Query1通過BDE訪問數據庫服務器,查到的數據再通過IAppServer接口傳給dm.ClientDataSet1,并在DBGrid1上顯示出來。
3結束語
多層結構是因網絡發展的需要而出現的產物,運用面向對象技術,分離用戶界面和企業邏輯,解決了兩層結構的維護成本高,客戶端臃腫等弊端,且改善了延展性。在Delphi中采用MIDAS技術,運用COM/DCOM/COM+或CORBA標準,為多層結構的開發提供了強大功能,增加了開發人員的生產力。