工程實務

新一代分散式應用軟體架構-.NET 

 

 

資訊部

組  長

王立柏

 

  要

.NET 是微軟(Microsoft)繼其DNA(Distributed interNet Applications)架構之後,所提出下一代的分散式軟體應用架構,它的發展方向是要建構一個使用網際網路開放標準(如:HTTPXMLSOAP…)的應用程式開發與執行的環境。在不久的將來,使用者只需要藉由Microsoft .NET就可以達到在任何時間、任何地點、透過任何裝置擷取所需要資訊的境界。

一、.NET符合未來Internet發展趨勢

應用程式的完整發展週期是由「分析」、「設計」、「程式撰寫」「測試」、「部署安裝」,最後透過「維護」來達到重覆使用的目標。運用.NET Framework就是讓程式開發者能在.NET平台上將應用軟體轉變成Web Services。所謂Web Services是指藉由網際網路開放標準技術*XML*SOAP(Simple Object Access Protocol)讓應用軟體能以Internet為平台,運用XML的格式來傳遞。我們可以把Web Services想像成軟體元件,將特定功能的部分取出,組合成我們要的結構,以提供其他應用程式共用。更甚者,我們亦可透過Internet,直接呼叫其他公司、其他開發者以不同程式語言所開發出來的服務程式。如此,不但可以提昇軟體元件的重複使用性,更能減少開發的時程與成本。

Microsoft .NET的設計目標就是為程式開發者提供快速的方式,開發出符合新一代Internet趨勢的工具及環境,並透過多種程式語言的支援,來開創新一代的Web Services,讓應用軟體的發展週期能更加完整。

*XML:是一種在W3C工業標準規範下的標示語言(Markup Language),主要在描述結構化的資料,提供標準的資料交換格式,讓資訊能跨越異質的環境與不同的設備。

*SOAP:是一種架構在HTTP協定上的分散式物件通訊協定。透過XML讓使用者端與伺服器之間可以互相整合,讓應用程式之間可以跨越防火牆而達到彼此溝通的目的。

二、.NET Framework

以現有的程式開發架構來說,不同的程式語言所要利用到的類別函式庫(Class Library)不盡相同,例如:以VB來開發須使用Visual Basic Runtime Library;採用C++則會運用MFC LibraryActive Template Library等不同的函式庫,而以後的發展趨勢是將這些類別函式庫整合在一起,讓所有的程式語言能夠互通有無,達到跨平台、跨語言的境界。.Net Framework就是一個用來建立、開發、部署及執行應用程式的整合環境。它包含了多種的類別函式庫(Class Library)API(Application Programming Interface)用來支援所有在Win32環境下已開發的應用程式及未來Web Services所需之功能,讓程式開發時不再因為不同類別函式庫而產生限制與困擾。

因為在.NET Framework中的類別函式庫已可以共用許多不同程式語言的Library,所以應用程式的開發不再受限於單一程式語言的限制。目前支援.NET Framework的程式語言已有四十多種,爾後我們便能夠更方便快速的在不同程式語言間進行類別的繼承、錯誤處理及程式除錯工作,讓程式開發人員可以自由選擇熟悉的程式語言,而不需顧慮多種程式語言之間的問題。(請參閱圖一)

三、Common Language Runtime(CLR)

Common Language Runtime是整個Microsoft .NET Framework的最底層,它提供了所有Microsoft .NET應用程式(無論是Windows應用程式或是Web Services)的執行環境(Runtime)

傳統的程式編譯方式是將原始程式碼直接編譯成電腦能直接執行的原生碼(Native Code),以執行檔的形式儲存,但是這樣會產生某台機器上編譯過的可執行檔在另一台機器不一定能正常執行。而在.NET Framework環境下,一個.NET應用程式的原始碼會先透過CLR編譯器(CRL Compiler)編譯,如果沒有語法上的錯誤,就會被加上Metadata引擎所產生的*Metadata,與原始碼產生的中介語言(Intermediate LanguageIL),一起放在目的格式檔案中,通常是指可執行檔(EXE)或是動態連接檔(DLL),如果在編譯過程需要用到其他程式庫,中間會再經過一個連結程式(Linker)來完成組合程式碼的動作。而在實際執行時,如果應用程式沒有預先被編譯成可被電腦直接執行的原生碼(Native Code),則系統會啟動一個即時編譯器(Just In Time CompilerJIT Compiler),將執行檔中的中介語言轉換成原生碼並交由作業系統執行。如此,不論是使用那一種支援.NET程式語言撰寫的程式,所產生的中介語言皆相同。將此中介程式碼放置於已安裝Microsoft .NET Framework的電腦上均可正常執行,不論其所採用的CPUIntel-basedalpha…或甚至是不同的作業系統。(請參閱圖二)

您是否覺得上述的情境十分熟悉?沒錯,目前Java語言不也是透過JVM(Java Virtual Machine)機制達到跨平台的理想,微軟.NET應是參考並吸收其觀念並加以擴充,除了可跨不同平台外,進一步可跨不同程式語言。

*Metadata:描述程式執行時所需要的資訊,是所有相關資料的資訊區。例如:程式內所包含或引用的類別、記憶體資源的配置、IL編譯成原生碼所需的資訊及安全管理等。

四、ASP.NET

ASP.NET又稱為Web Forms,是一種建構在.NET平台,以瀏覽器為使用者介面的Web 應用程式架構,可以類比為目前的ASP(Active Server Page)網頁技術,但無論就網頁的執行架構,或是撰寫程式所使用的程式語言及程式的設計概念,ASP.NETASP兩者本質上是完全不同,相較於ASPASP.NET具有以下的特色:

4.1支援多種程式語言

ASP所使用之語言以VBScriptJavaScript為主,而ASP.NET程式碼可以使用任何.NET Framework所支援的語言撰寫,並且程式碼與網頁可分開於不同的模組(即所謂Code behind),如此應用程式的業務邏輯與網頁設計,可分由不同專業人員負責,提昇軟體開發的品質及效率。

4.2效能的提昇

ASP是以直譯(Interpreter)的方式執行,應用程式碼並未事先經過編譯成較低階的程式碼,而是執行時再透過直譯器直譯成執行碼。而ASP.NET中執行的都是編譯過的原生碼,單就這一點就比ASP網頁來的快;此外,每次執行後都會在記憶體中保留此份機械碼,作為快取(Cache),因此之後的網頁執行速度便可省下載入的時間,大幅提昇執行速度。

4.3 Server Controls

所謂Control就是應用程式或網頁上的使用者控制項,如:按鈕(Button)、下拉式選單(Combo Box)、選取盒(Check Box)…等。在ASP網頁中,這些Controls均為使用者(Client)端元件,程式設計者必須為不同的瀏覽器(Browser)或不同的瀏覽裝置撰寫不同版本的網頁,而ASP.NETControl均為Server端元件,這些元件都會自動偵測使用者的瀏覽器或裝置,產生適當的網頁。例如:Internet ExplorerASP.NET會送出內含DHTML的網頁,如果是以Netscape或其他軟體瀏覽,則送出HTML 3.24.0的標準HTML,如果是手機,則產生以WML格式的網頁。

4.4事件驅動

ASP.NET中的所有東西都是物件,從變數(Variables)、控制項(Controls)、網頁(Web Page),程式設計師均可以物件的方式處理。所以可以像VB的程式設計師一樣針對事件撰寫程式,使程式更為簡單、直覺,避免一大堆的If-then-else

五、Win Form

相對於Web Form這種Thin Client應用開發程式架構,Win Form指的是Windows-based UI的應用程式,程式設計人員可以直接繼承.NET Framework Class Library中的System.WinForms類別,建立視窗,使用者操作介面,開發出類似現行以VBC++…等語言所開發的桌上型應用程式。

此類的應用程式較Web-based應用程式更具良好、豐富的使用者介面,又無Web-based應用程式Session Timeout的限制,操作較為方便,適合需要大量輸入資料的應用。但缺點是必須安裝在每一台要執行的電腦上,程式有修正時,安裝程序便需要重做一次,維護成本較高。

六、安裝與部署

目前的作業系統及程式語言會將常用的功能或服務,以DLL函式庫或COM元件的方式包裝,這樣會產生所謂的DLL Hell,也就是新安裝的DLLCOM元件會彼此覆蓋在系統登錄檔(Registry)中的設定值,導致原有的應用程式或系統無法正常運作。程式開發人員無法限制使用者電腦中會安裝那些程式,而影響到程式執行的穩定性,DLL Hell長久以來一直困擾著程式開發人員及企業中的IT人員。

Microsoft .NET的世界裡,軟體元件再也不需要登錄(Registry)了!開發好的程式要在另一個.NET環境進行安裝時,手續只有一個,就是Copy And Paste。只要把編譯好的程式,無論是EXE執行檔、DLL元件、ASP.NET.aspx網頁或Web Service.asmx檔,全部都是以複製/貼上的方式部署,這些檔案複製完成後,不需額外註冊或設定。.NET程式執行時,如果需要額外的元件,首先會自本身執行檔下的bin目錄開始尋找,因此,每套應用程式預設都是使用本身bin目錄下的元件,不同應用程式間不會相互干擾,也消除了DLL Hell的困擾。

七、結語

Microsoft .NET之於網際網路,絕對具備有當年Windows對個人電腦的影響力。.NET要提供給程式開發人員的,是專注於個人技能發揮的開發環境,跨作業系統的支援透過網際網路標準消弭於無形,同時免於選擇程式語言的困擾。.NET要提供給使用者的,是更順暢、更透通的資料交換環境,每一台電腦在網路上都不再是資訊孤島,而是一個可以整合的資訊庫。

目前Microsoft .NET仍為Beta 2版本,尚未正式上市(正式商品預訂在今年底或明年初完成),本篇文章僅就.NET之基本架構作一簡要的介紹,雖然正式版本與目前Beta版在施作細節上會作稍許修正,但基本觀念及大架構應不會改變。鑒於未來.NET架構與現行微軟分散式環境有重大的不同,IT人員必須預作準備,以因應未來Internet技術的演進。

八、參考資料

(1)Microsoft .NET程式開發學習捷徑手冊

(2)C#ASP.NET應用程式設計實務-恆逸資訊

(3)http://msdn.microsoft.com/NET/

 

< < < < < < < < < < < < < < < < < < < < < < 回目錄< < < < < < < < < < < < < < < < < < < < <