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