摘要: 在這個網絡發達、網絡技術飛速發展的時代,網絡對client/server結構體系新技術的需求也日益增大。在這個環境下,C/S技術的發展得到了長足的進步。而現代C/S的飛速發展,也相應地帶動了三層應用程序的發展。三層體系結構是現代C/S研究中的一個熱點。三層體系結構能夠在 Visual FoxPro 中實現嗎?我們需要怎樣去做呢?那么相對于三層的一層和兩層又是指的什么呢?本文討論了這些問題。
關鍵詞: client/serverVisual FoxPro三層體系結構
在C/S模型中有三層模型。當客戶和服務器是在同樣的環境時就是一層結構。它描述了你單獨用Visual FoxPro編譯的應用程序。數據完整地進入表單,并遵循控制數據全部寫入同樣的地方且在同樣的地方運行它的規則。不管你是直接從表還是通過視圖讀取數據,也不管規則是在你的代碼片斷還是在觸發器中,你只有一個單獨應用程序層:Visual FoxPro。而在兩層結構中,數據被移動到另一個環境中,并通過第一層讀取數據。這描述了傳統的client/server應用程序。數據保留在后端例如SQL Server或者Oracle中。前端響應用戶的界面(表單、菜單等等)。在一個傳統的兩層結構中,自定義規則通常在后端強迫數據完整一致。在三層結構體系中,自定義規則是存儲在它們自己的環境中,典型的是存儲在一個單獨的計算機上,以便多個前端能夠使用它。前端提供界面,后端提供數據,而中間層維護自定義規則的執行。這就意味著你有兩個client/server會話,一個是前端和中間層之間的,另外一個是中間層和后端之間的。前端從不直接和后端會話。
三層結構體系有兩個明顯的好處。第一個好處是你能夠有更多的層來劃分工作。你的應用程序有三塊,用戶界面、數據、規則,你有三層去處理這些事情。第二個好處是很容易重新使用你的自定義規則,因為不管前端還是后端的規則都不是隱藏的。如果你在Visual FoxPro中編寫了你的全部數據確認規則,這樣可以在不同的地方重新使用規則,比如說在Visual Basic或者Access應用程序中。如果它們處于它們自己的層中,那么任何前端都可以通過它們發送數據給任何后端。
這就是兩層和三層結構體系的普通想法。事實上,如果你使用Visual FoxPro去建立一個client/server結構體系,在如何構造你的應用程序上你可以有著更多的靈活性。在一個兩層結構體系中,你可以在后端,在Visual FoxPro,或者兩者都在,強迫執行完整規則。這對要執行的規則來說是非常恰當的和簡潔的。如果你在Visual FoxPro中執行它,用戶將立刻得到數據回饋,而后端就不用花費時間去檢查結果。如果你有500個用戶每天輸入100次,這就使得后端不用處理太多的工作。如果在前端僅僅是存取后端數據,而且是通過你的Visual FoxPro應用程序,那么你就能夠輕而易舉處理巨大容量的,甚至是全部的需要輸入到前端的數據確認代碼。
但是如果另外一個前端需要去讀取數據呢?如果Access和Visual Basic程序能夠輸入或者編輯命令,則你將不得不在后端確認結果。如果僅僅是用Visual FoxPro編寫的其他程序讀取數據,你可以寫Visual FoxPro代碼,并能通過一個存儲過程或者一個數據確認類來共享它。在三層結構體系中,你還能通過在前端執行數據的完整性來劃分工作。中間層用什么來編寫呢?Visual Basic希望你用Visual Basic去編寫中間層,用VB6.0去創建OLE服務器。OLE服務器能夠通過從Visual FoxPro使用OLE自動控制來調用。數據將傳遞給中間層,并進行確認。如果數據被拒絕,中間層將讓FoxPro得到有關的這一切。如果數據是正確的,它將被發送到后端,并同時通知FoxPro。
我們可以從Visual FoxPro中用你使用任何OLE自動控制服務的同樣方法使用這個VB中間層。你可以發出如下命令來啟動和服務器的一個對話:
oData=CreateObject(″VBServer.BizRules″)
當你希望發送數據到中間層,你可以發出如下代碼:
oData.Send(″Update employee Set salary=87000000″)
如果數據有效你可以使用如下代碼去查看:
If oData.ValidData
=MessageBox(″Success″)
Else
=MessageBox(oData.ErrorMessage)
Endif
請注意上面的語法是假設性的。實際執行時可能是不一樣。
用這個方法的不利之處是什么呢?你不能使用Visual FoxPro的遠程視圖來編寫client/server應用程序,至少在目前VFP的版本中是不能的。還有,通過OLE發送數據要比通過ODBC慢得多。
你可以在 Visual FoxPro 中編寫中間層。當前端希望保存數據的時候,保存數據到表的操作將在網絡上某個地方等待到結束。中間層是Visual FoxPro應用程序,為了確認新的數據要經常查詢表。數據不是被拒絕就是被發送到SQL Server。中間層能夠在一個表中保存一個成功或者失敗的消息。前端將根據這個查詢表并查明發送的數據是否有效。
通過例子我們可以看到將同樣的有效性規則寫入一個存儲過程和放入一個數據庫的區別。每個Visual FoxPro應用程序能夠在前端打開數據庫,并運行有效性檢查代碼。只將有效的數據發送到SQL Server中,三層結構體系中Visual FoxPro會比其他的做得更好。
參考文獻:
[1][美]Patrick O’Neil Elizabeth O’Neil.數據庫原理、編程與性能.機械工業出版社.
[2]匡松.Visual FoxPro程序設計教程.西南交通大學出版社.
[3]徐人鳳.SQL Server 2000 數據庫及應用.高等教育出版社.
[4]章立民.SQL Server 2005數據庫開發實戰.機械工業出版社.