Windows 原生開發工具的瑰寶 – Delphi 6
type
TIDelphi6 = class(TAutoObject, AccessObject)
protected
function Get__Name: WideString; safecall;
function Get_Attributes: Integer; safecall;
function Get_FullName: WideString; safecall;
function Get_IsLoaded: WordBool; safecall;
function Get_Name: WideString; safecall;
function Get_Parent: IDispatch; safecall;
function Get_Properties: AccessObjectProperties; safecall;
function Get_Type_: Integer; safecall;
{ Protected declarations }
end;
除了一般的COM物件之外,Delphi 6在支援MTS/COM+方面也以新的Transaction Object
和Transactional Data Module來取代以前的MTS Object和MTS Data Module,讓程式師可
以更方便的開發Microsoft DNA架構的應用系統。
Delphi 6以Transactional Object和Transactional Data Module同時支援MTS/COM+物件
開發Internet/Intranet應用系統的WebSnap元件組
Delphi 6中最重要的新增功能之一應該就要算是能夠讓程式師開發Internet/Intranet應用
系統的新架構和元件,這個新的功能稱為WebSnap。Delphi 6的WebSnap允許程式師
使用元件和視覺化的方式快速開發複雜的Internet/Intranet應用系統。WebSnap的特點
是允許程式師直接在這些元件之中加入稿本語言的能力,並且能夠直接在Delphi的整
合發展環境中撰寫稿本語言,預覽Web應用程式的輸出結果,以及Web應用程式產生
的HTML程式碼。
此外當程式師在開發Web應用程式時,經常需要使用許多的服務,例如處理圖形的元
件,上傳檔案的服務,Session的服務,搜尋檔案的服務,登錄和登出的服務等,
WebSnap都已經製作成了元件可以讓程式師直接使用,程式師再也不需要花費時間撰
寫這些程式碼。下圖便是Delphi 6WebSnap的元件組。
Delphi 6 的WebSnap提供了超過10個的元件
此外Delphi 6提供了Web App Debugger公用程式,允許程式師開發和除錯Web應用程
式,讓開發Web應用程式再也不是痛苦的流程。而WebSnap精靈更允許程式師建立不
同的Web應用程式,以及應用程式使用的快儲方式。例如下圖便是WebSnap精靈的畫
面,從這個畫面中可以看到Delphi 6能夠建立各種型態的Web應用程式。
Delphi 6的WebSnap精靈允許程式師建立各種不同的Web應用系統
在上圖中程式師建立Web應用程式時,也可以點選中間的Components…按鈕選擇
WebSnap精靈在自動建立Web應用程式時使用的WebSnap元件。例如下圖顯示了程式
師可以選擇使用的豐富的元件和服務。
Delphi 6的WebSnap提供了許多開發Web應用系統時需要使用的服務
由於WebSnap狀況結合稿本語言,因此程式師也可以指定WebSnap在自動產生稿本語
言時使用的稿本語言種類,以及產生的PageProducer的型態。例如下圖的畫面顯示了
程式師可以選擇使用JScript或是VBScript,可見WebSnap的彈性十足。
Delphi 6的WebSnap允許程式師使用JavaScript或是VBScript等 稿本語言
最後Delphi 6更棒的一點是WebSnap可以結合前面介紹的客製化View,讓程式師直接
在Delphi的整合發展環境中就可以預覽,開發和檢視Web應用程式的結果。例如下圖
是直接在Delphi的整合發展環境中使用稿本語言修改Web應用程式,而且稿本語言也
具有和Object Pascal一樣以不同顏色顯示不同語言元素的效果。
Delphi 6允許程式師在整合發展環境中直接使用稿本語言撰寫Web應用程式
至於下圖則是在Delphi的整合發展環境中直接檢視Web應用程式的預覽畫面,可以讓
程式師知道Web應用程式將來在瀏覽器中執行的結果。
Delphi 6的客製化View可以讓程式師在開發Internet/Intranet應用程式時在整合發展
環境中檢視Web應用程式的結果
總之,WebSnap讓Delphi 6在開發Internet/Intranet應用系統方面有長足的進步,提供了
非常好的整好開發環境。在未來WebSnap也將移植到Linux平台上,讓Kylix的程式師
也能夠使用相同的元件和技術開發Internet/Intranet應用程式。事實上程式師如果能夠
結合WebSnap和Delphi的資料庫能力,以及COM+的功能,將能夠開發出威力十足的
Web應用系統。
MIDAS的進化版本-DataSnap
在Delphi 6中,MIDAS將改名為DataSnap。DataSnap不但強化了MIDAS原有的功能,
更加入了許多新的元件,讓程式師可以使用它開發出更為強勁的應用系統,此外
DataSnap也改善了MIDAS的執行效率,讓使用它的應用程式能夠執行得更快速。下圖
是Delphi 6中DataSnap的元件組,從圖中可以看到數個新的元件。
Delphi 6的DataSnap元件組
此外在許多細節方面DataSnap也提供了以前MIDAS沒有的功能,例如直接以XML的形
式呈現MIDAS的Data Packet,和更細階的控制等。對於使用MIDAS開發應用系統的程
式師來說,新的DataSnap將會讓程式師更為滿意。
XML/XSL的支援
Delphi 6的另外一個重要的改良就是對於XML/XSL的支援了。除了增加許多新的VCL
元件讓程式師不必使用低階的COM介面或是複雜的API就可以輕易的處理XML/XSL文
件和資料之外,MIDAS的資料更可以直接輸出成XML,或是把XML的資料直接匯入
成MIDAS的Data Packet,Delphi的程式師再也不需要為複雜的XML程式設計傷腦筋了
。下圖就是Delphi 6和XML有關的元件。從圖中我們可以看到Delphi 6以VCL元件封裝
了XML Document,讓程式師直接使用Object Pascal來處理XML封裝的資料,並且允許
程式師選擇使用Microsoft的XML分析引擎,或是使用由IBM開發的XML分析引擎。
Delphi 6 中支援開發XML的元件組
除此之外,如果程式師需要處理大量以固定格式封裝的XML資料,那麼Delphi 6更提
供了一個視覺化精靈,讓程式師先匯入此XML檔案。此精靈便會自動分析此XML文
件,然後自動產生以Object Pascal封裝的程式碼,讓程式師直接可以呼叫自動產生的
程式碼中的方法來存取XML封裝的資料,不再需要使用XML Document元件來辛苦的
自己分析XML之中的資料,而且執行效率也比較好。
例如下面的圖形就是Delphi 6中XML Data Binding精靈的畫面。在這個精靈中我匯入
了一個封裝股市資訊的XML檔案,那麼這個這個精靈便會自動產生如下的Object
Pascal程式碼:
Delphi 6 的XML Data Binding精靈
在下面的程式碼中,我只需要存取TXMLStockType類別之中的功能,例如Get_Price,
就可以輕易的取得XML文件之中股票的價格,不再需要使用XML Document元件來分
析,這樣是不是快多了,而且不容易出錯呢?在支援XML方面,Borland的確為程式師
設想了許多的東西,也提昇了Delphi程式師許多的生產力,而XML Data Binding精靈
特別適合使用在程式師需要經常處理大量格式固定的XML文件。
IXMLStockListType = interface;
IXMLStockType = interface;
{ IXMLStockListType }
IXMLStockListType = interface(IXMLNodeCollection)
['{F56A36C4-4014-11D5-8B76-E593B0087905}']
{ Property Accessors }
function Get_Stock(Index: Integer): IXMLStockType;
{ Methods & Properties }
function Add: IXMLStockType;
function Insert(const Index: Integer): IXMLStockType;
property Stock[Index: Integer]: IXMLStockType read Get_Stock; default;
end;
{ IXMLStockType }
IXMLStockType = interface(IXMLNode)
['{F56A36C5-4014-11D5-8B76-E593B0087905}']
{ Property Accessors }
function Get_Exchange: WideString;
function Get_Name: WideString;
function Get_Price: WideString;
function Get_Symbol: WideString;
function Get_Volume: WideString;
procedure Set_Exchange(Value: WideString);
procedure Set_Name(Value: WideString);
procedure Set_Price(Value: WideString);
procedure Set_Symbol(Value: WideString);
procedure Set_Volume(Value: WideString);
{ Methods & Properties }
property Exchange: WideString read Get_Exchange write Set_Exchange;
property Name: WideString read Get_Name write Set_Name;
property Price: WideString read Get_Price write Set_Price;
property Symbol: WideString read Get_Symbol write Set_Symbol;
property Volume: WideString read Get_Volume write Set_Volume;
end;
{ Forward Decls }
TXMLStockListType = class;
TXMLStockType = class;
{ TXMLStockListType }
TXMLStockListType = class(TXMLNodeCollection, IXMLStockListType)
protected
{ IXMLStockListType }
function Get_Stock(Index: Integer): IXMLStockType;
function Add: IXMLStockType;
function Insert(const Index: Integer): IXMLStockType;
public
procedure AfterConstruction; override;
end;
{ TXMLStockType }
TXMLStockType = class(TXMLNode, IXMLStockType)
protected
{ IXMLStockType }
function Get_Exchange: WideString;
function Get_Name: WideString;
function Get_Price: WideString;
function Get_Symbol: WideString;
function Get_Volume: WideString;
procedure Set_Exchange(Value: WideString);
procedure Set_Name(Value: WideString);
procedure Set_Price(Value: WideString);
procedure Set_Symbol(Value: WideString);
procedure Set_Volume(Value: WideString);
end;
開發Web Service的精靈和元件
Web Service也是現在最熱門的Web技術了,不管是IBM或是Microsoft都在發展Web
Service的解決方案。Delphi 6在這方面也不落後,Delphi 6提供了SOAP和Web Service
精靈,讓程式師能夠快速的開發SOAP應用系統,也可以匯入WSDL自動產生骨架程
式碼。由於SOAP是未來Web和分散式應用系統的主流技術,而Web Service更是未來
Web應用系統的主要軟體架構,因此對於程式師來說,掌握這些技術便成了非常重要
的課題。
Delphi 6是Borland支援SOAP的第一個產品,由於SOAP是標準的協定,因此藉由
Delphi 6開發的SOAP應用系統可以和COM+,EJB或是Microsoft的.NET溝通,Delphi的
程式師現在就可以使用它開發未來的應用系統。下圖便是Delphi 6提供的SOAP精靈,
在Delphi 6中也提供了6個VCL元件讓程式師開發SOAP和Web Service的應用系統。
Delphi 6 允許程式師快速建立SOAP應用程式和Web Service
由Delphi 6 自動產生的SOAP模組
由於SOAP是Delphi 6重要的功能,又是現在最流行的技術,因此希望在未來的
RUN!PC文章中能夠有機會詳細的為各位介紹如何使用Delphi 6的SOAP和Web Service
技術開發應用系統 並且和其他的系統整合。
重新再造的執行時期函式館
對於Delphi 6和Kylix來說,Borland進行的隱形工程就是它們的執行時期函式館(Run
Time Library-RTL)了。Delphi 6的RTL不但為了跨平台而重新的整理過,而且加入了許
多新的RTL公用函式,以便讓程式師呼叫。這些新增的函式數目超過了數10個,例如
,光是有關DateTime的函式就有數10個。此外Borland為了讓Delphi 6中的Variant型態
和函式也能夠使用在Linux平台,因此特別新增了Variants.PAS這個程式單元,讓兩個
平台同時擁有Variant型態的變數和函式可以使用。
也許應該謝謝Kylix,在Delphi的執行時期函式館將近3個版本沒有什麼大幅改善的情
形下,在Delphi 6中Borland終於再次的重整和改善了核心函式館,也許對於大部份的
Delphi程式師來說可能沒有什麼感覺,但是經過改善的RTL不但功能更豐富,也避免
了因為VCL和RTL持續增加功能而會大幅增加編譯出來的執行程式大小巨幅增加的可
能。
第14版的Object Pascal編譯器
Delphi 6的編譯器為了支援視窗和Linux平台以及為了支援SOAP和Interface RTTI,因此
也進行了不小的改善。在Delphi 6中,以往以I Unknown為基礎介面的架構已經被更改
為IInterface,所有其他的介面都可以從IInterface繼承下來。IInterface定義了類似COM
中IUnknown介面所有的方法。Borland如此做是為了讓Window和Linux平台上的介面
機制都趨於一致。
此外Delphi 6也加入了一個新的介面IInvokable,任何從IInvokable介面繼承的介面以
及實作的類別都具備遠端啟動的能力。這個功能對於Web和分散式應用系統有重要的
影響。當然對於提昇Delphi成為分散式開發工具也有相當的效果,Borland在編譯器方
面持續的進步是值得肯定的。
不過,很可惜的是Borland並沒有在Delphi 6的Object Pascal加入try…except…finally這
個被許多Delphi程式師要求加入的語言架構,雖然這個架構在目前也可以使用巢狀的
try…try…except…end…finally來達成相同的效果,但是前者明顯的比較簡潔,而
Microsoft的C#和VB.NET則吸收了Object Pascal的這個語言優點,再加入了try…except
…finally架構。希望Borland能夠在未來的Delphi版本中也可以從善如流的加入。
產品總評
雖然前面的文章介紹了許多Delphi 6新增加的功能,但是仍然有許多的功能是本文沒
有介紹的,例如Delphi 6對於CORBA的支持和CLX等。下面的表格整理了Delphi 6中
重要的支援功能,並且附加了評語和得分以供讀者參考。
Delphi 6最主要的功能重點是在XML/XSL,Internet/Intranet以及SOAP和Web Service方
面的加強。又為了跨平台的目的,因此也在資料存取引擎,視覺化元件架構和執行
時期函式館方面進行了大幅度的改善。至於在BDE,ADO和COM+方面則只有小幅的
進步。
結論
當Microsoft不再推出VB/VC原生視窗開發工具,而Power Builder等其他視窗開發工具
也逐漸被淘汰出視窗平台之際,Delphi 6可以說是唯一最新的原生視窗開發工具,也
是最好的原生視窗開發工具。如果你仍然需要在視窗下開發應用系統,或是需要使
用/整合最新的資訊技術,那麼Delphi 6仍然是非常值得購買和昇級的開發工具。
不過希望在Borland全力發展Linux平台上的RAD工具時,不要忘記了視窗平台仍然有
許多的程式師需要最好的視窗開發工具,Borland仍然需要投注相當的資源和人力繼
續發展未來版本的Delphi。
Edited by - Gordon Li on 06/01/2001 18:43:15
相关帖子:
李维:.net vs delphi 6
delphi6 爆发还是灭亡?
李维:我的回忆和一些有趣的事
看IT风云变幻,宝兰与微软背后的故事,
李维:2001 年軟體界的巨星 - Kylix
看宝兰, 一年之间连续推出kylix1.0 ,interbase6.0, delphi6,jbuilder5 ,c++builder6也不日即出,敬请关注宝兰2001年与微软对绝的杀手锏kylix
陈宽达: 遊戲程式設計初學者常遇之疑問
明修栈道,暗渡陈仓,陈宽达点指开发工具
本文地址:http://com.8s8s.com/it/it6106.htm