CLR Hosting (1) — 可擴充體繫結構和CLR Hosting

來源:互聯網
上載者:User

CLR Hosting (1) -- 可擴充體繫結構和CLR Hosting

1 可擴充體繫結構

  對於可擴充體繫結構,有許多不同的定義,大到一個網路叢集系統,小到只有幾個組件相互作用構成的小軟體,對可擴充體系都可以有不同的理解和定義。同樣,在談到CLR Hosting話題時,不可能不談到可擴充系統結構,我們宿入(host) .Net CLR的一個重要目的就是獲得一個可高度定製的可擴充體系。

  在本系列文章的上下文中對可擴充體繫結構的理解是指,一個定義了擴充模型體系、可動態載入其特定“擴充體”到自己的進程中啟動並執行任何一個應用系統。對於這個定義需要展開來講述一下。

  第一,說一個應用具備可擴充體系,其內必須定義並實現了一套內在的模型體系,即物件模型(Object Model)體系。這裡所說的對象,並不是我們在程式編碼中所涉及的C++或C#等語言層面的對象,它指的是一個更高層次上的組件對象,它可能是一個二進位層級(物理指令空間上)的組件對象(如COM組件),也可能是一個由IL代碼和Metadata支援(邏輯空間上)的.Net Assembly,這種高層次上的組件對象,一般由一個或多個語言層面的對象來實現完成;這裡所說的的模型體系,是指這些應用內部的組件對象,按照應用內部的特定關係形成一個階層,在這種階層的定義和約束下,應用把這些組件對象組織起來並開放、暴露出去,形成一個外部可訪問的物件模型,供“擴充體”(如Addins、Extension Modules、指令碼)或其它外部Client來使用。物件模型體系的一個典型的例子是MS Office應用,例如其中Excel的內部Application、Workbook、Worksheet、Range等對象以及它們所形成的關聯式模式,還有VBA或COM Addin對它們的訪問。

  第二,說一個應用具備可擴充體系,它必須具備動態特性。動態特性是一個可擴充應用的關鍵,它有三層含義。首先,對於這個應用的擴充部分(如Addins、Extension Modules、指令碼),使用者通過配置或其它方式是能夠控制它們的載入情況的。其次,這個應用在運行時可依照使用者的配置或其它方案動態地把這些擴充部分裝入進程。第三,這些擴充部分程式實體,不是和應用本身一起開發建立的,是應用發布以後,高端使用者為特定需求、出於定製或擴充目的為應用單獨開發和再發行的。

  第三,說一個應用具備可擴充體系,它一般要有“擴充點”方面的設計考慮。雖然這一點不是必須的,但良好的擴充點設計,可以使一個可擴充的應用系統的生命力更加長久。擴充點,指的是一種設計因素,就是它決定了一個應用在哪些層面上可以被擴充或定製,決定了一個應用會支援哪些形態的擴充體。下面是常見的的擴充點設計所支援的擴充體形態,一般一個應用不必支援全部的擴充體形態。

  1)Addins 這是一種小規模、任務相對單一、宿主約束較多的一種擴充、定製方案。但完全可能實現很強大的功能。

  2)Extension Modules 簡稱Extensions,這是一種面向某一方面的、宿主約束較少的方案。設計中通常可以用它來完成某一個完整方面的若干任務單元。

  3)Scripts 即指令碼,這是一種較強大的擴充、定製方案。通過指令碼,可以全方位訪問宿主應用內建的物件模型(調用宿主內對象的介面方法、響應其事件等),也可以設計用來實現指令碼方式的、特定於宿主應用的Gadgets形式的向外延展群組件。

  4)Code Behind Document 這個方案本質上利用了指令碼技術,但它強調的是設計與應用的統一。宿主應用的主體功能完全或部分承載於指令碼代碼之上,實現“擴充定製方式”與“主體功能實現方式”兩者的高度統一。指令碼代碼成為完成應用主體功能的不可缺少的部分。

  以上從三個方面,講述了本系列文章上下文中對可擴充體系的定義和理解,與讀者達成一種一致的認識,方便以後的討論。但這不是我們的重點,我們的重點是一種實現可擴充系統的方式。

 

2 可宿環境和CLR Hosting

  關於如何?一個可擴充體繫結構,方式不外有二。一是完全自訂設計實現,另一個則是宿入一個現存可用的可宿入環境(Hostable environment)。後者的優勢是顯然的。即使選擇前者方式,完全自訂設計實現,那麼當這個應用系統完善到一定程度、系統結構設計優秀到一定程度,那麼也相當於自訂完成了一個不一定完整的可宿環境,可見,兩種方式並不是完全矛盾的。

  宿入一個現存可用的可宿環境,就相當於我們直接站在了一個較高的起點上。一般地,一個可宿環境,由於它特別的應用需求,就決定了它設計上對通用範圍、結構合理性、自身可定製性等方面要做出更多的考慮,所以它的體系合理性是值得信任的。另外,當你的應用宿入了這樣的一個環境,也必然從設計上要適應它的某些體系層次上的特點或要求,這種反向作用的結果,就是提升了你的應用的總體設計水平。由此可見,這種方式實現可擴充體系的益處很明顯。如果你正在設計一個可高度擴充、定製的應用,那麼選擇宿入一個現存可用的可宿環境的方式是很值得推薦的。

  那麼在MS的技術平台上,有哪些常見的可宿入環境供我們選擇呢?列舉一下。

  1) Active Script Engine 如VBScript或JScript指令碼引擎,通過宿入這種引擎來獲得對指令碼的支援能力,使得應用程式支援定製和擴充。

  2) VBA APC 即通常說的Visual Basic for Application環境的宿入。這是MS在Win32平台上非常成熟的可宿環境,也是大家最可能熟悉的一個。MS自己的Office系統、AutoDesk的AutoCAD、Intellution的iFix、金山公司的WPSOffice開發版等等,都是實現為它的宿主。

  3) .Net CLR 這是MS的最新的可宿入環境技術。它為MS Win32/64平台或.Net平台上的應用提供了更加強大的Managed Code方式的可擴充定製的能力。它也是本系列文章的唯一主要要講述的內容。

  值得一提的是,上面我沒有列出Trident(IE Browser的核心)和ASP.NET。從可宿環境角度來看,Trident(MSHTML)實際上是一個本身宿入了Active Script Engine的一個可宿環境,被用於瀏覽器類程式、郵件用戶端、遊戲用戶端等應用中。而ASP.NET是一個本身宿入了.Net CLR的一個更大的可宿環境,被IIS或其他系統用於宿入以提供對ASP.NET Web Application和ASP.NET Web Service的發布支援。

  在上面的常見可宿環境的列表中,大家看見了.Net CLR,也就可以知道了.Net CLR Hosting在整個Hosting大背景知識體系中的位置。那麼,.Net CLR作為MS最新一代的可宿環境,除了ASP.NET,到目前為止還有其它的宿主應用嗎?

  MS SQL Server 2005和IE6/7是可以馬上想到的例子。

  到目前為止,還沒有一家非MS的產品宿入了這個環境。但可以想見,不久這個局面就有可能會改觀。.Net CLR核心技術逐步穩定,MS內部應用.Net CLR的方式和趨勢,將直接影響外界對它的態度。Win32平台上大量的應用都面臨著如何與.Net親密接觸的問題,大面積的向Managed環境移植或重寫,幾乎不可能,.Net CLR Hosting將是最為平滑的手段。到現在為止,.Net CLR Hosting還是比較新的應用話題,無論是案頭應用開發、伺服器軟體開發還是嵌入式環境的開發,CLR Hosting都將發揮它的作用。對有幸經曆這個技術發展階段的我們來講,這難道不是一個機會嗎?

  如果答案是肯定的,那麼我們還等待什麼呢?

  

  本文作為系列文章的第一篇,講述了Hosting有關的背景知識,指出了CLR Hosting在這個知識體系中的位置,為後續的文章做些準備。另外,下面把Hosting相關的詞彙列出並簡單注釋,方便讀者閱讀、理解這個系列的內容。

  Host CLR -- 宿入CLR -- 這裡Host是動詞,表示宿入的動作含義。

  CLR Host -- CLR宿主-- 這裡Host是名詞,表示一個宿入了CLR的主體應用系統,含義範圍既包括宿主環境,也包括被宿入的可宿環境。

  Host Envirenment -- 宿主環境 -- 名詞片語,表示宿主系統中,主體程式為可宿環境提供的環境。含義中不包括可宿環境本身。

  Hostable Envisionment -- 可宿環境 -- 名詞片語,表示可被宿主系統宿入的環境實體。

  Hosted Environment -- Hostee -- 被宿入環境 -- 同上,但有已經被裝載入宿主環境的含義。

  CLR Hosting -- CLR宿入 -- 動名詞片語,表示宿入的過程、技術、概念等,具體含義依賴上下文。

  返回首篇(目錄)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.