一、為什么Visual FoxPro漸漸淘汰了
為什么會有Visual FoxPro 要淘汰的傳聞呢,我不是很清楚。但這兩年微軟對Visual FoxPro的不宣傳態(tài)度卻是為這股謠言起到了推波助瀾的作用。另外Visual FoxPro 確實(shí)是一個容易引起誤會的產(chǎn)品,初級用戶很容易對它產(chǎn)生“不怎么樣的”評判,于是加上那謠言就產(chǎn)生了“Visual FoxPro 就真的要淘汰了”的幻覺了。
為什么說Visual FoxPro 是容易引起誤會的產(chǎn)品呢?我總結(jié)以下幾點(diǎn)原因:
面向?qū)ο笈c面向過程之爭
我們說Visual FoxPro是面向?qū)ο蠡恼Z言,是有根據(jù)的。面向?qū)ο蠡恼Z言必須具備四個特性:抽象(Abstraction)、封裝(Encapsulation)、繼承(Inheritance)、多態(tài)(Polymorphism)。對照一下Visual FoxPro,是不是支持這四大特性!
當(dāng)然,Visual FoxPro 與C++和Object Pascal 一樣都是歷史悠久的語言,所以語言中有很多面向過程的語素。我知道很多學(xué)校在教學(xué)中,只是教導(dǎo)學(xué)生們使用Visual FoxPro的面向過程的語言特色,而忽視了面向?qū)ο蟮慕虒W(xué),同樣的問題也存在于廣大的 Visual FoxPro 程序員中。我們必須明白:不能因?yàn)槲覀儧]有使用Visual FoxPro面向?qū)ο蟮膹?qiáng)大功能,而說Visual FoxPro不是面向?qū)ο蟮恼Z言,這就像不能因?yàn)樘煜掠?、沒有出太陽,而說太陽被天狗吃掉了——多么的幼稚可笑!
我們知道Visual FoxPro對數(shù)據(jù)的操作沿用了多年來的面向過程的做法,這與現(xiàn)在流行的開發(fā)工具有很大的不同。我覺得,微軟這樣做是有它的道理的:
名列前茅,面向過程的數(shù)據(jù)處理,更能發(fā)揮XBase語言體系的靈活與隨意的特色。這一點(diǎn),你用過其他的數(shù)據(jù)庫開發(fā)工具,然后再用用Visual FoxPro就明白了。
第二,不直接提供面向?qū)ο蟮臄?shù)據(jù)處理組件,不代表不允許用戶封裝自己的數(shù)據(jù)處理組件。很多優(yōu)異的 Fox程序員,都會自己封裝專門數(shù)據(jù)處理組件,這才是Visual FoxPro編程的高尚境界!
面向記錄與面向集合之爭
根據(jù)筆者的淺薄認(rèn)知,關(guān)系型數(shù)據(jù)庫處理可以分為面向記錄操作和面向集合操作。
各種開發(fā)工具支持的客戶端光標(biāo)體系就是面向記錄操作的,它們支持記錄之間的絕對定位,更明白地說就是可以在記錄之間導(dǎo)航,諸如:SKIP、GO TOP之類的語句。Visual FoxPro 無疑是此道的絕對高手,20年的語言發(fā)展,聚集了大量面向記錄的語言要素。這是因?yàn)檫@樣,我們才會反復(fù)強(qiáng)調(diào):Visual FoxPro的Cursor 體系靈活、強(qiáng)大!
各類大型數(shù)據(jù)庫,如Oracle、SQL Server 是面向集合處理的代表,看看正統(tǒng)的SQL 語言,絕對沒有數(shù)據(jù)導(dǎo)航之說,數(shù)據(jù)記錄之間是平等的,一切都要講關(guān)系、擺條件!
隨著技術(shù)的發(fā)展,人們開始注意到,不能分割這兩種對數(shù)據(jù)的操作方式,于是大型數(shù)據(jù)庫支持了游標(biāo)語素,F(xiàn)ox也支持符合規(guī)范的SQL 語言。
產(chǎn)品定位導(dǎo)致Visual FoxPro變化不易為人們感覺。微軟要把Visual FoxPro作為三層構(gòu)架(或是多層構(gòu)架)的中間層開發(fā)工具。
什么是三層構(gòu)架呢?名列前茅層是用戶界面:它包含了用戶界面,讓使用者輸入,輸出,查詢等工作;第三層是資料層:它就是用來放資料的地方,一般是指后端數(shù)據(jù)庫,主要有包括 Oracle、SQL Server 等,它主要是提供一個很大的地方,來有規(guī)則的存放數(shù)據(jù);第二層是商務(wù)邏輯層(中間層):有人要說了:存取資料,直接從名列前茅層跳到第二層可不可以?當(dāng)然可以,沒有人規(guī)定不能走捷徑,而且從數(shù)據(jù)庫直接抓資料,既快又好,那為什么搞出個第二層呢?
商務(wù)規(guī)則是經(jīng)常變化的,比如上班從8 點(diǎn)改為10 點(diǎn),那電腦怎那么知道老板因?yàn)椴痪皻馍僮尨蠹疑隙€小時班呢?它一定無法知道,你必須告訴它,這時問題就來了,如果你有很多部電腦,例如:100 臺,你就得一部部換新程序。如果這是一個掛在Internet上的網(wǎng)絡(luò)程序,難道總讓用戶download新程序不成?
更重要的是,在大量客戶存在的環(huán)境里,傳統(tǒng)的兩層構(gòu)架根本沒有能力承擔(dān)巨大的工作壓力,必須通過某種中間系統(tǒng)實(shí)現(xiàn)壓力平衡,這就是中間層的另一妙用!
中間層是沒有圖形界面設(shè)計的代碼編寫,并且是OOP方式的代碼編寫,不僅要熟悉后臺數(shù)據(jù)庫的特性,還要考慮前臺界面工具的特性,最重要的是商務(wù)邏輯的構(gòu)架,同時還要求懂得IIS、MTS(COM+)、NT的安全設(shè)置等復(fù)雜枯燥的東西。有趣的是,近年來 Visual FoxPro 的各種改進(jìn),更多的是在這些方面下功夫,到了最新版本的Visual FoxPro 7 更是在此方面增加了若干特性,下面就讓我用四個問題來說明Visual FoxPro 在開發(fā)中間層方面的貢獻(xiàn):
問題一:Visual FoxPro能開發(fā)出穩(wěn)定、有效率的Server程序嗎?能,在1999年發(fā)布的Visual FoxPro SP 3中微軟賦予了Visual FoxPro開發(fā)多線程進(jìn)程的內(nèi)組件的能力,并增加了新的運(yùn)行時刻庫VFPnT.DLL(n代表版本號),支持其運(yùn)行,在這個運(yùn)行庫中,刪除了大量老式的和界面控制元素,使得它更小巧。但是由于Visual FoxPro6本身不是很穩(wěn)定(加打SP4或SP5才有所改善),所以這個很棒的功能在Visual FoxPro 6下并不能充分發(fā)揮,直到Visual FoxPro 7出現(xiàn)才使它的顯示出英雄本色!
問題二:分布式的事務(wù)、動態(tài)負(fù)載平衡怎么實(shí)現(xiàn)?Visual FoxPro 7對COM+有很好的支持,借由COM+就可以解決這兩個問題了!
問題三:作為Server程序,客戶程序怎樣與Server交換數(shù)據(jù)集合?這是Visual FoxPro 6開發(fā)的Server程序的致命弱點(diǎn),我們知道Visual FoxPro是用來處理數(shù)據(jù)的,但不能與外界自由交換數(shù)據(jù)集合會大大降低開發(fā)、使用以及程序運(yùn)行效率!在Visual FoxPro 7里我們XML就可以快速、輕易的傳遞大型數(shù)據(jù)集合,真正做到數(shù)據(jù)集的來去自由?,F(xiàn)在回想Visual FoxPro 6中我們用的那種“循環(huán)+屬性”的做法,真有天上與人間的感受!
問題四:能不能讓Visual FoxPro開發(fā)的Server任由客戶使用,叫干什么就干什么?可以的,在Visual FoxPro 7里提供了一個全新的函數(shù):ExecScript()。有了它,就可以一次執(zhí)行多條客戶端送來的符合Visual FoxPro規(guī)范的語句:你可以定義變量、做查詢、更新數(shù)據(jù)、修改表結(jié)構(gòu)……
微軟確實(shí)實(shí)踐著讓Visual FoxPro在中間層運(yùn)行的承諾。但遺憾的是:由于國內(nèi)用戶的水平、國內(nèi)軟件應(yīng)用的領(lǐng)域,對大多數(shù)Fox Fans 無法感受Visual FoxPro日新月異的變化——對他們來說,Visual FoxPro確實(shí)“沒有改變”!
延伸閱讀:
二、Visual FoxPro 對 Web的支持的三個層次
FoxISAPI
這是最先登場的技術(shù),當(dāng)年 ASP 技術(shù)還沒有出現(xiàn)的時候,我們在 IIS 里就可以通過 ISAPI 技術(shù)實(shí)現(xiàn)動態(tài)網(wǎng)頁開發(fā)。
Web Server
ASP 技術(shù)出現(xiàn)了,我們知道 ASP 技術(shù)的一大特色就是支持服務(wù)器端的組件的應(yīng)用。用 Visual FoxPro 的編寫的 COM 組件就能運(yùn)行在 IIS 里,供 ASP 調(diào)用。
Web Service
這是 Visual FoxPro 7 的新特性,也是當(dāng)前最熱門的技術(shù)。它與Web Service的最大不同就是:Web Server 組件只能通過 ASP 程序調(diào)用,而Web Service可以供任何系統(tǒng)在全球范圍調(diào)用,無論客戶端的硬件平臺、軟件平臺,只要它支持SOAP、支持XML就可以了。