|
多年來Borland在軟體開發的工具市場中一直扮演很重要的角色,也逐漸發展出多種不同的資料存取技術,用來存取各類型的資料,這些主要的技術包括BDE、InterBase、DataSnap以及最新的dbExpress。而這些資料存取技術也都陸續在Borland主要的產品Delphi中出現,而對大部分的設計師來說,往往是因為接觸了Delphi,或說是學習了Delphi,才知道有這些技術的存在,至於這些技術在軟體開發過程中所扮演的角色或作用,往往是遭遇問題後,才會受到重視或儘一步探討,以下內容主要的目的不是要探討這些技術如何使用,只是要讓各位在使用Delphi或其他Borland開發工具的同時,也能了解選用這些技術的適當時機。
nBorland Database Engine(BDE)
早期Borland開發的一些產品,各有不同的資料存取方法,而且每當相對資料庫的功能有所變動或增加,甚至版本升級,已經撰寫完成的程式,就必須因為存取方法的變動而跟著修改,往往增加設計師的負擔,也相對的增加了開發的時程和成本,Borland的工程師就決定,建置一個新的工具來抽離出所有資料庫的功能,讓每一種資料庫都有一種資料庫引擎來服務,即使不同的資料庫有不同的儲存位置和格式,但是卻有一致性的存取界面和方法,提供未來設計的程式,即使存取的資料庫功能有所變動或版本升級,也只需更新或修改存取界面的組態,不需對程式進行大幅度的修改,也因此才有後來BDE(Borland
Database
Engine)的產生,隨著Delphi以及資料庫產品的進步與發展,BDE的功能也不斷的進步與擴充,可存取的資料庫型式,也已從最初的File-based的資料庫,進展到Server-based的資料庫,到現在Delphi一直是資料庫前端開發工具市場上最受歡迎的產品,雖然自從Delphi
7之後,根據Borland官方發布的文件顯示,建議使用者使用Borland新的資料存取技術dbExpress,來取代BDE的使用,而且有關於使用BDE設計程式的使用者,將不再提供後續的支援,看來BDE已經是功成身退,即將走入歷史了,但是許多新技術的設計都是擷取BDE的優點而重新設計的,看來BDE的影子,依然會在Borland相關的產品中存在一段時間,正所謂『老兵不死,只是凋零』。
nInterBase
InterBase這個資料存取技術也稱為InterBase
Express ( IBX ),是一組不同於BDE和ADO,卻類似BDE的一組元件,專為存取Borland所開發的InterBase資料庫所設計。
以InterBase資料庫而言,到2003年底,InterBase資料庫目前最新的版本是InterBase
7.1 Service Pack 1,Service Pack
2也在加緊趕工準備出貨,InterBase資料庫和其他大型Server-based資料庫軟體一樣,都希望提供穩定且有效率的資料存取服務,而對於自家的後端資料庫軟體,Borland的前端開發工具,包括Delphi、C++Builder等,除了提供原有BDE技術的資料存取服務外,當然也加入了專為InterBase資料庫所設計的IBX技術資料存取服務。
為了開發時的便利性,InterBase資料庫在設計上有兩種版本,Local版和 Server版,利用Local版的InterBase作為系統在開發階段的資料庫,可使系統省去進行遠端存取時的複雜組態,以及節省網路因交易而延宕的時間,到開發後期再利用Delphi內部的小工具軟體—Data
Migration Wizard或稱之“Data
Pump”,來簡化將桌上型的應用程式轉化成為主從架構系統的工作,由於在Delphi等開發工具中使用IBX,必須和使用BDE一樣設定連結資料庫的Alias
(一組連線資料庫的參數及組態設定),所以資料庫即使移轉到其他位置,也只需調整部分的Alias參數設定,就能重新連結成功。
此外對於一些比較複雜異質性資料庫環境,當需要使用到一些比較進階的資料庫特徵如security、triggers、rules等,通常也代表著比較複雜的挑戰,而對於這些功能,當然InterBase資料庫和IBX也都能盡量滿足需求。
nDataSnap
DataSnap原本叫做MIDAS ( Multi-Tier
Distributed Application Services Suite ),是在Delphi
3發展出來,用在多層式架構的應用程式設計環境中,被建置用來讓程式有更好支援性的技術和套件。
DataSnap是Borland特有的資料庫應用程式解決方案,可以讓Delphi和其它的Borland開發工具,將傳統2-tier
( client/server ) 的架構切割成3-tier ( client/applciation server/database
server ) 的架構。
為了讓你更了解DataSnap,下面簡單介紹什麼是1-tier、2-tier和n-tier的資料存取環境。
|
|
◆1-tier
以1-tier的應用系統而言,因為資料存取的來源往往是檔案型式的table files,如果採用BDE來存取這些table
files,對於程式本身來說,BDE只是一組被程式載入到記憶體的DLLs而已,對整個系統來說,實際上只有一支程式被執行,這種程式架構我們便稱之為1-tier。
◆2-tier
如果一支Delphi程式可以使用BDE ( 或是其他技術 )來存取Server-based資料庫 (例如InterBase、SQ
Server或是Oracle
),因為資料庫伺服器本身就是一個獨立執行的應用程式,不論存取資料的程式和資料庫伺服器是否同處於同一台機器上,就是一支2-tier的應用程式,例如程式存取的資料庫是位於同一台機器上的Loca
InterBase也是一樣,因為LocaInterBase自己就是一個獨立執行的程式。
◆3-tier ( n-tiered )
一個3-Tier的應用程式是在原來傳統2-tier的架構中,再加入一層middle-tier,這一層稱為“Application
Server”,這一層的角色是在系統中,用來處理資源的集中和資料的分派,在這種三層式架構的應用系統中,資料庫伺服器、中間層的“Application
Server”以及連結中間層的客戶端程式,都是各自獨立的,只是客戶端程式和中間層的“Application Server”必須用DataSnap(MIDAS)來連結,協力完成對後端資料庫伺服器的資料存取。 |
利用DataSnap所建置的中間層“Application
Server”,在三層式的分散式架構設計中,好比在用戶端程式和資料庫伺服器之間,提供一個抽象的服務層,以轉介用戶端的需求和資料庫的回應給對方,彼此卻沒有直接接觸,換言之,即使對後端資料庫進行任何變動,因為都是透過中間層的“Application
Server”來轉介服務,所以不會衝擊到用戶端的設計,使得程式的設計,比傳統2-tier的程式設計具有更大的彈性。
ndbExpress
dbExpress是Borland的新一代資料存取技術,也是一組隨Delphi和Kylix專業版及企業版一起分發的元件,因此dbExpress也是跨平台的資料存取技術,當存取其所支援的資料庫伺服器時,不再像使用BDE一樣,需要進行額外的分發組態設定,dbExpress甚至可以直接封裝資料庫伺服器的API,直接和資料庫的客戶端溝通,執行客戶端所提出的需求。
此外dbExpress如果和DataSnap搭配,將可以支援離線作業模式,在此模式模式下,使用者可以自由的由資料庫取得資料、離線、修改資料,最後並重新連回資料庫,即使交易發生問題也能進行衝突調解。
相對於BDE,dbExpress是取其架構的優點,去蕪存青,重新設計的新資料存取技術,為了讓程式在使用dbExpress時有較佳的執行效率,dbExpress有兩個主要特色:
|
|
◆Read only dataset:利用dbExpress元件所存取的資料是唯讀的,換言之,存取到的資料是不能修改的。
◆Uni-direction cursor:利用dbExpress元件所存取的資料,存取的方式只能由前往後,不能往前回溯。 |
由上列兩個為達到執行效率的設計來看,好像把資料庫應用程式中最主要的功用給否決掉了,但是不用擔心,這樣的設計自然有相對應的解決之道,只要搭配幾個來自於DataSnap的元件,問題自然迎刃而解,當然實作的細節不在這裡贅述,這裡主要還是在介紹Borland不同資料存取技術的特色。
介紹完這些資料存取技術,我們到底該如何選擇適當的資料存取技術呢,我想這必須從你所開發的軟體主要用途,並對現在及未來的需求作全盤的考量,或許也可以簡單的從下列兩點來思考:
|
|
◆系統型態:首先考慮你所開發的系統,是屬於1-tier的單機型態,還是2-tier或3-tier的主從架構型式,也許一開始可以先規劃成1-tier或2-tier的型式,最後再根據需求調整成3-tier的架構,這種漸進式的規劃好處是,允許你在投資大型多系統的專案之前,去發展比較簡單、且不需昂貴成本的專案雛型,而且在你選擇的每一種系統型態,Borland都有相對應的資料存取技術可以支援。
◆系統生命週期規劃:在系統的專案團隊中,對於系統存取資料時所使用技術的選擇,必須考慮過去、現在及未來的需求,過去如果曾經用過BDE作為系統的資料存取技術,你會發現,在系統的分發與組態上,會遭遇不少的麻煩,但是在當時,也許BDE已經是所能找到的最佳解決方案了,但面對現在系統的需求以及未來可能的變動,BDE可能反而成為系統的包袱,這時Borland的新資料存取技術--dbExpress,也許就可以取代BDE解決目前遭遇的難題,因為dbExpress可以在程式編譯連結時,將dbExpress的驅動程式函式庫包含在內,所以可以將程式安裝時的複雜度降至最小,進而降低產品本身對外部函式庫的依存關係。 |
|