Visual Basic 的未來

 

Visual Basic 的未來

一個版本中將出現的Web Forms(Web表單), Web services(Web服務)和語言的改進

Joshua Trupin

本文讀者是已經熟悉了Visual Basic的用戶。

概述: 下一個版本的Microsoft Visual Basic 主要有以下三方面的改進:Web Forms、Web services和麪向對象的語法方面的改進。 Web Forms使得經驗豐富的Visual Basic用戶可以象現在編寫單機程序一樣簡單地開發網絡應用程序。通過SOAP 接口, Web services讓你在可以聯網的任何地方配置你所設計的組件。另外,幾個在面向對象的語言方面的關鍵性的改進使得Visual Basic的代碼象C++一樣具有靈活性,這幾方面的改進包括繼承性、多態性和重載。有關這方面的內容可以參考Steve Ballmer 的“VBITS keynote on the next generation of Visual Basic

Visual Basic 已經經歷了很多次的改進。然而從它誕生以來,我就一直喜歡它的一點是:就它的核心而言,你仍然可以象1991年一樣的編寫你的程序。當然,和那時相比它的軟件包已經有了很大的增強,但是這些改進一般是補充性的,並沒有模糊作爲編程工具本身具有的目的,這個目的就是:使Visual Basic能更簡單快捷地用於設計、編寫和調試出優秀的面向對象的應用程序。

當前使用的Visual Basic 6.0版本引入WebClasses作爲一種簡化手段,用於配置健壯的面向網絡的應用程序。事實上,WebClasses提供了大量的途徑可以通過常見的工具把程序移植到網絡上。(關於Visual Basic 6.0在網絡下的可伸縮性的詳盡討論可以參見Ted Pattison的”Advanced Basics column”( Microsoft Internet Developer於1999年十月出版發行)

我最近有機會了解到了下一個版本的Visual Basic計劃採取的一些新的改進。其中主要的改進是在存儲容量方面,開發者可以使用的存儲容量擴大了三倍。下一個版本的Visual Basic計劃將採用Visual Studio®環境中叫Web Forms的特性。Web Forms代表着一種全新的組件化的網絡解決方案。Web services將成爲一種新的基於XML的方案,它通過標準的網絡協議發佈中間層的事件處理功能。同時,Visual Basic 語言將包括一些開發者長期以來一直要求的結構,這使得Visual Basic符合那些C++和Java使用者所熟悉的面向對象的編程習慣。

在下一個版本的Visual Basic的測試版中,這些改進將會被公佈。在這裏我會給出一些代碼片斷,但不是完整的方案。那麼現在還有什麼好擔心的呢?很簡單,只要你決心利用這些新的功能,你現在就可以通過這些特定的方法來設計你的程序,得到最好的實踐練習,從而順利地幫助你過渡到下一個版本的Visual Basic。即使你不這麼做,只要你按照我在本文末尾所提出的原則去組織你將來的程序,你也不會有什麼損失的。

Visual Studio Web Forms

Visual Basic的下一個版本將是Visual Studio開發環境的一部分,很可能爲網絡開發者引入Web Form這個新的概念。引進Web Form概念的目的是爲了擴展Visual Basic的隨機存取功能,從而使Visual Basic可以應用於影響日益廣泛的網絡程序的編寫。使用Visual Studio中的任何一種語言的開發者都可以共享這種Visual Studio Web Forms。

一個Web Forms頁包括兩部分:實現Web Forms頁可視界面的一個HTML文件和處理Web Forms頁事件的源文件。既然目前有三分之一基於Visual Basic環境的開發是面向網絡,Microsoft計劃進一步增強這方面的功能。在下一個版本的Visual Basic中,你可以象現在使用Visual Basic生成表單一樣設計Web Forms。你將擁有一個Web控件工具箱。你可以直接把控件拖放到HTML編輯器中使用,只需要設置一下它們的特性,編寫一些適當的代碼即可。(見Figure 1)。總而言之,你可以象你使用Visual Basic生成表單一樣來做這些工作。你會擁有完全符合IntelliSense®、WYSIWYG格式的表單設計和編譯過的代碼。所以只要你知道如何使用Visual Basic編寫應用程序,Web Forms就可以讓你成爲一個網絡開發者而不用絲毫改變你的工作方式。

Figure 1 Building a Web Form in Four Steps

Figure 1Building a Web Form in Four Steps

Web Forms 在服務器上運行,只把HTML格式的表單傳給用戶。正如Active Server Page (ASP)一樣,它既不是特定的瀏覽器,當然也不是基於Web Form的應用程序;但整個過程也是在服務器上運行。事實上,你正在運行一個程序,它爲遠程用戶生成HTML3.2格式的接口。跟ASP網頁不同,這些代碼是編譯運行而不是解釋的,所以運行速度有明顯的提高。

 設計Web Forms的目的是爲了同時獲得ASP 和WebClass兩者最好的特性。你可以使用Visual Studio家族中的任一種語言來生成Web Forms。所以,你可以使用你所掌握的知識來編寫高效的、面向服務器的網絡應用程序。

Web services
 Web services是Visual Studio開發工具系統採取的第二大改進。就核心而言,一個Web services就是一個通過標準的網絡協議發佈的中間層的事件處理函數。既然它們使用HTTP作爲傳送機制(見Figure 2),所以可以通過防火牆進行通信。只要合適地分配URL,你可以簡單地在一個網絡應用程序中構造多種Web services。在程序運行時,所有這些內部構件之間的調用都會自動打包,通過XML接口進行調用。開發者可以在任何平臺上、使用任何語言編寫和使用Web services。如果你需要保密,你可以使用Secure Socket Layer (SSL)或標準校檢技術。

Figure 2 Web Services Architecture

Figure 2Web services Architecture

如果你對這些聽起來開始覺得有點熟悉了,那是一個很好的開始。用於組件之間傳送數據的機制是SOAP,即簡單對象許可協議。Don Box在2000年三月出版的MSDN™ Magazine中詳細的介紹了SOAP。

所有這些新的特性都是爲了讓網絡程序開發者可以利用已存在的、可再次使用的Web services進行組合,從而可以更快的編寫他們的程序,而不用每次都重頭來編寫它們。這將帶來程序代碼提供者和程序開發者的新時代。

使用下一個版本的Visual Basic,你很快就可以把一個具體項目中的函數以Web service的形式發佈和實現。你也許很熟悉把一個Visual Basic 的類定義爲public的過程。在下一個版本的Visual Basic中將會有一個新的標誌,暫時叫作webpublic。這意味着程序將作爲Web service發佈。它不僅僅可以通過COM接口爲需要它的當地項目所用,而且可以爲任何引用了它的URL地址的網絡程序服務。正如你可以把引用加入到一個新項目中的公共對象中一樣,你也可以把引用加到網絡程序中,然後象使用當地程序一樣使用它。

當然,運行機制是有些不同的。Visual Basic能夠通過COM接口對當地對象解析引用。當你加入一個網絡服務的引用到你的應用程序中時,遠程對象將自動生成接口的定義,並使用SOAP協議發送到Visual Studio開發環境中來。雖然這些將以XML形式產生,但你不用自己做任何連接的工作。Visual Basic將爲你自動處理它。在接收到接口定義以後,你就可以使用IntelliSense,如同你已經編寫了引用該對象的代碼一樣。

這有一個簡單的例子。在某些場合下,你也許想編寫這個叫Seahawks的函數,它可能和下面這些代碼有點類似:

      Public Function Seahawks(ByVal opponent As String) As String

    Seahawks = "lose"

End Function

如果你構造的項目中包括了這個函數,Visual Basic將自動生成關於這個函數的XML格式的描述,並把它發佈到網上。

<?xml version='1.0' ?>

<methods href='http://julian/Football/Teams'>
    <method name='Seahawks' href='Seahawks'>
        <request>
            <param dt='string'>opponent</param>
        </request>
    <response dt='string'/>
    </method>

</methods>

這個XML文件將用於描述Seahawks函數。如果你使用的是Visual Studio開發環境,你就可以把任何已經發布的Web service直接拖放到應用程序中,創建一個新類。如果你想調用Internet網上任何地方的Web service,你只需要創建包含Web service的類的一個實例,然後就可以調用它的已發佈的方法。

 當Seahawks函數被調用時,它會通過XML信息包自動通信。如果你使用的是Microsoft® Internet Explorer 5.0(包含了XML支持),你可以在你的瀏覽器中試運行該函數。你也可以如下一樣使用URL地址調用該函數:

http://julian/webservice1/component1.methods/Seahawks?opponent=Miami

它將返回如下XML格式的數據:

<?xml version="1.0" ?>

<Response>lose</Response>

爲了方便Web services的開發,Visual Basic將引入一個新的對象類型,即Web Service。你可以象現在創建一個當地的DLL文件一樣簡單地設計和發佈你的Web Service到遠程服務。

語言上的改進

長期以來,在喜歡Visual Basic的程序開發者和喜歡另外一些更“複雜”的語言的程序員之間的關係一直都很緊張。我不止一次的爲我所最愛的編程語言反駁諸如”玩具語言”之類的控訴,他們認爲Visual Basic缺乏OOP的特徵。

好,那麼猜猜發生了什麼?下一個版本的Visual Basic將最終結束他們的抱怨。Microsoft計劃加入面向對象編程的三大特性:繼承性、多態性和重載。這還不是所有!另外一些結構,包括結構化的錯誤處理和瀏覽也將被引入Visual Basic語言。

繼承性的特性允許你設計一個基類,然後編寫一些派生類,它們繼承基類的功能,這樣做可以節約時間,並提高程序的可重用性。例如,你編寫了一個名叫BaseClass的基類,它有一個函數:

Function GetCustomerName()
' Do some stuff

End Function

現在你想再寫一個類,它可以象調用本身的函數一樣調用基類的GetCustomerName函數。過去的方法是什麼呢?這在過去沒有辦法。然而,現在的新的方法只需在新的類的上面插入如下簡單的一行語句:

Inherits BaseClass
Function GetCustomerID()
' Do some stuff

End Function

編寫兩個或更多的名字相同但具有不同標識符的函數,這就是重載。在某種程度上,Visual Basic在函數調用時對內部類型的轉換以及屬性的設置中已經實現了重載。比較以下兩行有效的Visual Basic 代碼:

Text1.Text = "7"

Text1.Text = 7

在這兩個調用中,Text1中的text都將被設爲字符串“7”。這就是重載調用,因爲Visual Basic知道如何處理輸入的不同的數據類型。它把它們作爲變量處理,並自動進行轉化。當你調用一些參數類型有明確定義的函數時,Visual Basic也會作同樣的轉化。下面的兩個函數調用:

a = SetVal("This")

a = SetVal(7)

都可以正確調用以下函數:

Function SetVal(x As String)
    Form1.Text1.Text = x

End Function

既然Visual Basic已經可以傳送多種不同的變量類型,爲什麼還需要重載功能呢?這是因爲雖然目前單獨的一個函數已經可以處理多種數據類型,它不能根據傳入的不同的數據類型產生不同的動作。相反的,比較以下兩個函數:

Function GetCustomerID(custname as string) As Integer

' Look up customer ID based on customer name
End Function
 
Function GetCustomerID(purch as long) As Integer
' Look up customer ID based on purchase order

End Function

通過重載,你可以根據輸入的數據類型來實現函數。這對於下一個版本的Visual Basic是很重要的,因爲它具有一個新的特性――缺省數據類型保護。一般來說變量的自動轉換是有利的,但可以想到有時也會給你帶來麻煩。例如在前面的SetVal的例子中,如果你要傳送的是字符7而不是字符串“7”,那會發生什麼情況呢?下一個版本的Visual Basic將會自動捕獲這個錯誤。(如果你的代碼是基於Visual Basic以前的無類型識別的功能,這個特性會被禁用)

最後,多態性是對已定義的類的再定義過程。例如,你想寫一個BaseClass類的派生類,但你想重新改寫GetCustomerName函數。在下一個版本的Visual Basic中,你可以用類似以下這種新方法來實現這種類的定義:(注意:最終的語法取決於正式的版本)

Inherits BaseClass
Function GetOrders()
Overrides Function GetOrders()
•••

End Function

更多的語法特性

下一個版本的Visual Basic可能不僅僅只有我以上提到的那些有關面向對象方面的改進。對於scalability和可重用性而言,還有一些線程生成、錯誤處理和許多長期以來一直被期待着的新的改進。

目前,Visual Basic支持apartment-threaded模型。雖然這種模型爲應用程序的開發提供了真正的高效率,但它還不夠理想。下一個版本的Visual Basic將在這方面有所改進。它採用freethreaded模型,這在編寫scalable的網絡應用程序時將很有用處。Visual Basic還將包括一些語法結構,你可以用來產生多線程。典型的線程發生操作如下所示:

set t = New Thread(New Threadstart

                  (AddressOf(BaseClass.Function1))

從這個例子中,可以看到下一個版本的Visual Basic有AddressOf結構,用它來返回函數的地址。你不再被迫跳過那些需要函數指針的API函數了!如果你需要返回調用,你可以利用它來做到這一點。

計劃中的另一項改進是結構化的出錯處理。不久以前,Visual Basic還要求你在代碼中插入大量的On Error聲明。多年以來,我一直對插入如此多的GOTO語句感到不安。這些語句一再告誡我不要再使用它們!現在讓我們來面對這個問題――我們需要一種出錯處理機制。

下一個版本的Visual Basic採用集中處理出錯的方式。Visual Basic將象那些“高尚的”語言一樣支持 try...catch...finally結構。你可以在你的代碼的頂端放置一個包含有出錯處理的子程序。這裏是實現出錯處理的一個例子:

Sub SafeWrite()
Try
  Open "Testfile"
•••
  Write #1
Catch
   Kill "Testfile"
Finally
   Close #1
End Try

End Sub

還有一些其他方面令人激動的改進,現在的Visual Basic的使用者將會逐漸熟悉它們。在下一個版本的Visual Basic中,你可以在變量聲明的同時對變量進行初始化:

Dim a as integer = 10

你也可以在一個表達式中建立和初始化一個新的對象。你也可以通過類來共享變量。最後,但不僅僅如此,繼承的概念擴展到了項目的用戶界面的基礎。關於Visual Basic的一個具有代表性的觀點是它很難在相同的基礎上創建多種不同的表單。(在聯合開發的環境中,通常有這種要求)。在下一個版本的Visual Basic中,你可以通過模板類型來實現。

多年以來,人們一直期待着這些改進,這是爲什麼呢?讓我們來看看。Visual Basic的通信(在這方面我已經從事了將近十二年)變得越來越複雜,遠遠超過1991年的第一版。Visual Basic早期最初用於小型的便攜式的工具樣機的快速設計和開發。結果,Visual Basic獲得了“玩具語言”的名聲(在我看來,這是意料之外的)。現在它顯然不再是玩具了,再這麼說的人就是出於一種盲目的偏見了。現在各個領域都有大量的基於Visual Basic的軟件包。Visual Basic 正在發展着。去年,在中心研究所,我和一個軟件開發者進行了交談,他使用Web-Class編寫的程序每星期接受上百萬次的點擊。

下一個版本的Visual Basic所發生的變化是令人驚喜的。如果你想獲得它們所帶來的那些好處,那就使用它們。如果你不想,你可以理直氣壯的使用你目前仍然使用的。然而,瞭解在象Visual Basic這種比C++和Java容易使用的多的語言中,也可以實現C++和Java所實現的功能,是有好處的。

未來的發展趨勢

這種預覽式的介紹你留下了什麼樣的印象呢?這個問題問得很好,但是你可以找到問題的答案。在過去的一年中,可以明顯的看到ASP開發的變化,這些開發程序常常由一些易讀的ASP腳本組成,在這些腳本的基礎上運行整個程序。由於ASP是對整個腳本代碼進行解釋執行的,在對各組件進行組裝時,人們逐漸發現這種技術的固有的侷限性。我聽到越來越多的開發者說,他們要把他們的事件處理函數從腳本代碼中完全脫離出來,放在更快捷的編譯方式的模型下實現,這些模型用C++或Visual Basic編寫,通過COM接口進行組裝。

對於你所能想到的各種理由,Visual Basic都是能夠滿足的。使用Visual Basic來設計組件實際上並不比使用VBScript或JScript®困難多少。你可以編寫執行起來更快的代碼,並且很容易就能達到你的要求。當下一個版本的Visual Basic發佈後,你可以使用Visual Basic來生成面向網絡的對象,這種對象和ASP兼容。總之,走組件組合的路線不管是現在還是將來都會被認爲是最好的選擇。

正如我前面時候提到的那樣,使用Visual Basic(和WebClasses)編寫的面向Internet的應用程序已經有很廣泛的基礎。問題是,大部分的基於WebClasses的應用程序並沒有經過很好的設計。它們沒有很好地區分應用程序的不同的層次,把中間層的過程和基於DHTML的用戶界面混淆了。

下一個版本的Visual Basic將引入WebClasses,它是經過精心挑選後確定的網絡開發的工具。因爲它更具有scalable、更強大、而且是真正的language-agnostic。它在Visual Studio的所有的工具中起作用。如果你注意多層開發的一些基本規則,你可以很容易地完成這個轉變。特別要注意,把中間層過程和顯示層過程分開。強烈推薦在做這些工作時,參考Windows® DNA 2000的體系結構。核心的事件處理功能必需在中間層完成,你可以使用各種你所喜歡的編譯語言編寫的用於實現這些功能的各個組件。然後,這些組件組裝在一個ASP腳本文件中,這樣各組件就可以協同工作了。如果你把大部分的邏輯運算放在事件對象中而不是腳本中的話,那就是最理想的了。它不僅對將來向Web services轉變是一個好的主意,它也是一種值得效仿的實踐。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章