Delphi斷想
榮耀 2002秋
Delphi是迄今為止口碑最好的RAD(Rapid application Development)產(chǎn)品。
Delphi 3.0是Delphi系列中劃時(shí)代的版本,成熟穩(wěn)定的Delphi 5.0更加鞏固了Delphi企業(yè)級(jí)開發(fā)工具的領(lǐng)先地位。
Delphi 4.0是印象中最惡劣的一個(gè)版本。打了這個(gè)補(bǔ)丁,那個(gè)程序無法正常編譯;打了那個(gè)補(bǔ)丁,這個(gè)程序無法正常編譯。當(dāng)然了,Delphi不會(huì)存在明顯的bug的,除非你的程序規(guī)模足夠大,復(fù)雜度足夠高。
對(duì)于企業(yè)軟件開發(fā)人員來說,Delphi的MIDAS技術(shù)具有劃時(shí)代的意義。在今天微軟.NET中,仍然可以看到它的影子。
Delphi的Active Form是一項(xiàng)令人大開眼界的技術(shù)。它的優(yōu)點(diǎn)是,你無需什么特別的Web知識(shí),就很容易將現(xiàn)有Windows項(xiàng)目包裝為Active Form,只需添加短短幾行代碼,即可將其展現(xiàn)于瀏覽器之中。進(jìn)入了IE,也就免去了客戶端維護(hù)成本。這種技術(shù)的表現(xiàn)力也遠(yuǎn)比asp豐富。但它也有一個(gè)致命的缺點(diǎn):它太笨重了,只適合運(yùn)行在高速局域網(wǎng)里。
在電力系統(tǒng)中普及面較廣的財(cái)務(wù)軟件,就是采用這種技術(shù)。沒有最好的技術(shù),只有最合適的技術(shù),Delphi的Active Form技術(shù)用在這種地方,再合適也不過。
要想把這種技術(shù)用在廣域網(wǎng)中,或者低速局域網(wǎng)內(nèi),那簡(jiǎn)直是一種惡夢(mèng)。
Object Pascal是我所喜歡的最優(yōu)雅的語言之一。既傳統(tǒng),又現(xiàn)代;既簡(jiǎn)單清晰,又功能強(qiáng)大;代碼可讀性好,又不象Visual Basic程序看起來那么呆板。更重要的是,類似于C++,它也支持多種程序設(shè)計(jì)風(fēng)格。
三年前,如果你開發(fā)數(shù)據(jù)庫相關(guān)軟件,但又不想使用腳本性的語言,或者什么專用的開發(fā)工具(比如Oracle公司的Developer 2000),你希望使用一種由真正面向?qū)ο笳Z言所驅(qū)動(dòng)的開發(fā)工具,那Delphi就是最佳選擇。
Delphi的設(shè)計(jì)者意識(shí)到了絕大部分軟件都要和數(shù)據(jù)庫打交道,從而加入了對(duì)數(shù)據(jù)庫相關(guān)開發(fā)功能的強(qiáng)力支持,這種決策是極其明智的。正是這種對(duì)數(shù)據(jù)庫開發(fā)的強(qiáng)力支持,導(dǎo)致Delphi取得了巨大的成功。
Delphi對(duì)數(shù)據(jù)庫的強(qiáng)力支持,達(dá)到、甚至超過了一些專門的數(shù)據(jù)庫開發(fā)工具。但這也容易讓一些外行誤解,以為Delphi只是一種數(shù)據(jù)庫開發(fā)工具。
我還記得幾年前,南京新街口新華書店里赫然擺放著一本書,它有一個(gè)很搞笑的名字:《關(guān)系型數(shù)據(jù)庫:Delphi》(記不太清楚了,但大差不差)。
Borland似乎過于注重IDE(Intergrated Development Environment)的功能開發(fā)了,它本來可以進(jìn)一步改善Object Pascal語言質(zhì)量,一些本該出現(xiàn)于Object Pascal中的語言特性,現(xiàn)在進(jìn)入了C#,個(gè)中原因,無需贅言。
Delphi并沒有包裝所有的Windows API,比如某些COM相關(guān)的API,這也是我放棄Delphi的原因之一。
RAD開發(fā)環(huán)境,對(duì)于企業(yè)級(jí)項(xiàng)目軟件開發(fā)來說,絕對(duì)不可或缺。RAD降低了軟件開發(fā)的門檻,RAD也“造就”了一大批半調(diào)子程序員。我懷疑對(duì)RAD工具的誤解和偏見,就起因于這些半調(diào)子程序員。
最新版本的Delphi,總是會(huì)帶來一些最新的技術(shù),有時(shí)這些技術(shù)對(duì)于微軟來說還只是一個(gè)概念,而Borland已經(jīng)把它變成了產(chǎn)品。但Delphi的最新技術(shù),有時(shí)只能算是一種過渡性的技術(shù)。
盡管Delphi 6.0對(duì)數(shù)據(jù)存取、Web、xml都有大力改善和支持,但在我看來,Delphi 6.0不過是一個(gè)過渡版本而已。
Delphi的BDE(Borland Database Engine)數(shù)據(jù)存取技術(shù),提供了對(duì)ODBC數(shù)據(jù)源的完整支持,又打擊了ODBC,這種技術(shù)在Delphi 3.0中達(dá)到巔峰。Delphi的MIDAS技術(shù),提供了n-tier數(shù)據(jù)存取技術(shù),但仍然建立于BDE之上。Delphi 5.0提供了對(duì)ADO的完整支持,并有放棄BDE的架勢(shì)。Delphi 6.0的dbExPRess和DataSnap技術(shù)是Borland對(duì)數(shù)據(jù)存取技術(shù)不斷創(chuàng)新的又一個(gè)例證。
但是,即使在BDE達(dá)到鼎盛時(shí)期,即使在今天有了那么多數(shù)據(jù)庫存取技術(shù),潮起潮落,ODBC的地位,仍然不可代替。除了直接調(diào)用數(shù)據(jù)庫專用API(比如Oracle的OO4O)外,還沒有哪一種數(shù)據(jù)存取技術(shù)的效率,可以達(dá)到或者接近ODBC API。
微軟就是Windows平臺(tái)上事實(shí)上的標(biāo)準(zhǔn),遺留代碼(legacy code)的強(qiáng)大勢(shì)力往往也超出任何人的想像。
VCL(Visual Component Library)控件和ActiveX控件完全是兩碼事。ActiveX控件目標(biāo)于跨語言的二進(jìn)制重用,而VCL控件則目標(biāo)于Borland開發(fā)環(huán)境內(nèi)的組件重用,重用的層面可以是目標(biāo)文件,也可以是源代碼,這其實(shí)更象C++的類重用,比如說MFC(Microsoft Foundation Classes)的類重用。
用慣了VCL控件的程序員,對(duì)于需要單獨(dú)發(fā)布、注冊(cè)ActiveX控件感到厭煩;用慣了ActiveX控件的人,對(duì)于Delphi把什么東西都編譯到一個(gè)大文件里感到好笑。
Delphi的運(yùn)行時(shí)BPL(Borland package library),其實(shí)就是一種特殊的DLL,你可以認(rèn)為它們是Borland格式的DLL。如果你想讓程序尺寸變小,如果你同時(shí)要發(fā)布數(shù)個(gè)使用了同樣BPL的程序,使用運(yùn)行時(shí)BPL,它可以使你心想事成。
Delphi對(duì)于版本自動(dòng)增加功能的方便支持,使得Delphi程序員對(duì)于Visual C++需要手工修改版本號(hào),感到奇怪。RAD和非RAD的差異,由此可見一斑。
Delphi模式被成功地克隆到了C++Builder身上,但直到目前為止,C++Builder中的技術(shù),一般仍或多或少地滯后于Delphi中的最新版本的技術(shù),但愿這種狀況能夠盡快得到改善。
Delphi和C++Builder使用了同樣的后端,但Borland沒有從一開始就把這兩種語言集成到一個(gè)Studio之類的集成開發(fā)環(huán)境之中,從而可以同樣的風(fēng)格(乃至功能)的IDE支持不同口味的語言為促銷賣點(diǎn),這讓我不解。我懷疑這要么是一個(gè)決策失誤,要么暗示了Borland缺乏足夠的資源。
對(duì)于那些從事企業(yè)軟件開發(fā)同時(shí)又迷戀C++的程序員來說,C++Builder無疑是他們的寵兒:)
如果你是一名Delphi程序員,如果你熟悉C#,你就會(huì)明白,除了C#采用了C/C++風(fēng)格的語法之外,并且,撇開許多人都說C#是java的克隆不談,C#從Delphi中,借鑒了大量的語言設(shè)計(jì)思想。
我相信,Anders Hejlsberg在設(shè)計(jì)C#語言時(shí),首先會(huì)本能地想到Object Pascal,而不是Java。看看C#的單實(shí)現(xiàn)、多接口繼承的面向?qū)ο蟮膶?shí)現(xiàn);看看try/catch/finally異常處理結(jié)構(gòu)(我知道很多人會(huì)說,這些都來源于Java);看看屬性(propery)的概念(我知道有人會(huì)說,這來源于Visual Basic);看看那個(gè)override關(guān)鍵字…… 幾乎可以斷定,這一切首先都來源于Object Pascal。
毋庸置疑,Delphi必須支持.NET。
在.NET平臺(tái)開發(fā)工具領(lǐng)域能夠同微軟Visual Studio .NET一較高下的,目前也只有Delphi具有這個(gè)實(shí)力。
在Windows平臺(tái)上,總有人不喜歡微軟,但這些人中的大部分還是要前進(jìn)到.NET,Delphi .NET就是一個(gè)理想的替代品。
Delphi .NET,令人期待。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注