溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解.NET框架與COM的背景和歷史以及關(guān)系的發(fā)展

發(fā)布時(shí)間:2021-11-25 13:52:30 來(lái)源:億速云 閱讀:122 作者:柒染 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(guān)如何理解.NET框架與COM的背景和歷史以及關(guān)系的發(fā)展,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

.NET框架與COM:背景和歷史

可復(fù)用軟件不是一個(gè)新概念。八年來(lái),人們一直在使用各種形式的組件對(duì)象模型(COM)。事實(shí)證明,它是最為成功的可復(fù)用軟件模型。COM引進(jìn)了“組件”的概念——它是可復(fù)用的代碼塊,可以將多個(gè)獨(dú)立函數(shù)的功能進(jìn)行組合,從而擴(kuò)充成諸如Microsoft Word這樣的應(yīng)用程序。

大多數(shù)開(kāi)發(fā)人員使用OLE時(shí)深刻體驗(yàn)了COM功能。OLE是基于COM形成的一組功能,使得用戶能將一種文檔嵌入到另一種文檔中。這個(gè)功能本身似乎不太引人入勝,但它的作用卻不同凡響:當(dāng)用戶將一個(gè)Excel文檔粘貼到Word文檔中后,單擊嵌入的Excel文檔時(shí),OLE將會(huì)把Word的工具欄和菜單轉(zhuǎn)換成Excel的工具欄和菜單。

從開(kāi)發(fā)人員的角度看,COM通過(guò)引進(jìn)幾個(gè)明確定義的接口(諸如iUnknown)便可提供代碼復(fù)用功能,開(kāi)發(fā)期工具可通過(guò)這些接口來(lái)查詢一個(gè)組件的功能,并能把這些功能添加到工具中。這就像Visual Basic?開(kāi)發(fā)系統(tǒng)工具箱中的控件能夠被拖到某個(gè)窗體中一樣。實(shí)際上,每個(gè)控件都代表上百行甚至上千行的代碼,可以容易地封裝在“黑匣子”中,開(kāi)發(fā)人員只需直接調(diào)用其功能即可。

開(kāi)發(fā)人員在使用COM時(shí)感到不便的一個(gè)問(wèn)題是,他們必須編寫附加代碼來(lái)將業(yè)務(wù)邏輯程序轉(zhuǎn)換成可復(fù)用的組件,同時(shí)還必須實(shí)現(xiàn)許多接口才能進(jìn)行這種轉(zhuǎn)換。最重要的是,COM要求開(kāi)發(fā)人員必須手動(dòng)處理復(fù)雜問(wèn)題,比如:清空不再使用的組件曾占用的內(nèi)存、計(jì)算組件的使用次數(shù)、建立或撤消線程和進(jìn)程以及處理版本控制問(wèn)題等。

有人可能認(rèn)為,讓開(kāi)發(fā)人員親自執(zhí)行這類工作的主意非常好,但這也有幾個(gè)弊端。首先,要開(kāi)發(fā)人員一一執(zhí)行上述所有工作非常困難,往往容易出錯(cuò):導(dǎo)致應(yīng)用程序錯(cuò)誤、系統(tǒng)崩潰以及可怕的“DLL Hell”。另外,嚴(yán)格地寫出所有這種附加代碼,會(huì)降低開(kāi)發(fā)人員的工作效率,導(dǎo)致延期上市。

這對(duì)使用Visual C++?開(kāi)發(fā)系統(tǒng)的開(kāi)發(fā)人員來(lái)說(shuō),尤其如此。而對(duì)使用Visual Basic的開(kāi)發(fā)人員來(lái)說(shuō),這種情況不是很嚴(yán)重。Visual Basic抽象并簡(jiǎn)化了COM的許多概念,是全世界***生產(chǎn)力、***的開(kāi)發(fā)環(huán)境,但它的局限性在于:為了實(shí)現(xiàn)這種高生產(chǎn)力而不得不向開(kāi)發(fā)人員屏蔽了COM的一些功能。

微軟在2000年的專業(yè)開(kāi)發(fā)人員大會(huì)(PDC)上引進(jìn)的.NET框架,能自動(dòng)在軟件編寫過(guò)程中進(jìn)行“智能拼接”,使得開(kāi)發(fā)人員可以集中精力編寫業(yè)務(wù)邏輯,而不必編寫COM基本結(jié)構(gòu)。

什么是.NET框架?

.NET框架是一個(gè)多語(yǔ)言組件開(kāi)發(fā)和執(zhí)行環(huán)境,它由以下三個(gè)主要部分組成:

公共語(yǔ)言運(yùn)行時(shí)。此名稱不能準(zhǔn)確反映它的全部功能。實(shí)際上,公共語(yǔ)言運(yùn)行時(shí)在組件的開(kāi)發(fā)及運(yùn)行過(guò)程中,都扮演著非常重要的角色。在組件運(yùn)行過(guò)程中,運(yùn)行時(shí)負(fù)責(zé)管理內(nèi)存分配、啟動(dòng)或刪除線程和進(jìn)程、實(shí)施安全性策略、同時(shí)滿足當(dāng)前組件對(duì)其它組件的需求。在開(kāi)發(fā)階段,運(yùn)行時(shí)的作用有些變化:與現(xiàn)今的COM相比,運(yùn)行時(shí)的自動(dòng)化程度大為提高(比如可自動(dòng)執(zhí)行內(nèi)存管理),因而開(kāi)發(fā)人員的工作變得非常輕松。尤其是,映射功能將銳減開(kāi)發(fā)人員將業(yè)務(wù)邏輯程序轉(zhuǎn)化成可復(fù)用組件的代碼編寫量。對(duì)編程語(yǔ)言而言,運(yùn)行時(shí)這個(gè)概念并不新奇:實(shí)際上每種編程語(yǔ)言都有自己的運(yùn)行時(shí)。Visual Basic開(kāi)發(fā)系統(tǒng)具有最為明顯的運(yùn)行時(shí)(名為VBRUN),Visual C++?跟Visual FoxPro?、Jscript?、SmallTalk、Perl、Python和Java一樣有一個(gè)運(yùn)行時(shí),即MSVCRT。.NET框架的關(guān)鍵作用在于,它提供了一個(gè)跨編程語(yǔ)言的統(tǒng)一編程環(huán)境,這也是它能獨(dú)樹(shù)一幟的根本原因。

統(tǒng)一的編程類。.NET框架為開(kāi)發(fā)人員提供了一個(gè)統(tǒng)一、面向?qū)ο蟆哟位?、可擴(kuò)展的類庫(kù)集(API)。現(xiàn)今,C++開(kāi)發(fā)人員使用的是Microsoft基類庫(kù),Java開(kāi)發(fā)人員使用的是Windows?基類庫(kù),而Visual Basic用戶使用的又是Visual Basic API集。只是簡(jiǎn)單地一用,.NET框架就統(tǒng)一了微軟當(dāng)前的各種不同類框架。這樣,開(kāi)發(fā)人員無(wú)需學(xué)習(xí)多種框架就能順利編程。遠(yuǎn)不止于此的是,通過(guò)創(chuàng)建跨編程語(yǔ)言的公共API集,.NET框架可實(shí)現(xiàn)跨語(yǔ)言繼承性、錯(cuò)誤處理功能和調(diào)試功能。實(shí)際上,從JScript到C++的所有編程語(yǔ)言,都是相互等同的,開(kāi)發(fā)人員可以自由選擇理想的編程語(yǔ)言。

活動(dòng)服務(wù)器頁(yè)面(ASP+)。ASP+是使用.NET框架提供的編程類庫(kù)構(gòu)建而成的,它提供了Web應(yīng)用程序模型,該模型由一組控件和一個(gè)基本結(jié)構(gòu)組成。有了它,Web應(yīng)用程序的構(gòu)建變得非常容易。開(kāi)發(fā)人員可以直接使用ASP+控件集,該控件集封裝了公共的、用于超文本標(biāo)識(shí)語(yǔ)言(HTML)用戶界面的各種小器件(諸如文本框、下拉菜單等等)。實(shí)際上,這些控件運(yùn)行在Web服務(wù)器上,它們將用戶界面轉(zhuǎn)換成HTML格式后再發(fā)送給瀏覽器。在服務(wù)器上,控件負(fù)責(zé)將面向?qū)ο蟮木幊棠P吞峁┙oWeb開(kāi)發(fā)人員,這種編程模型能提供面向?qū)ο缶幊碳夹g(shù)的豐富功能。ASP+還提供一些基本結(jié)構(gòu)服務(wù)(諸如會(huì)話狀態(tài)管理和進(jìn)程重啟服務(wù)),這些服務(wù)大大減少了開(kāi)發(fā)人員要編寫的代碼量,并使應(yīng)用程序的可靠性得到大幅度提高。ASP+還允許開(kāi)發(fā)人員將軟件作為一項(xiàng)服務(wù)來(lái)提供。通過(guò)使用ASP+ Web服務(wù)功能,ASP+開(kāi)發(fā)人員只需進(jìn)行簡(jiǎn)單的業(yè)務(wù)邏輯編程,而由ASP+基本結(jié)構(gòu)負(fù)責(zé)通過(guò)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SOAP)來(lái)提供服務(wù)。

.NET框架與COM的關(guān)系

.NET框架的一個(gè)主要目的是使COM開(kāi)發(fā)變得更加容易。COM開(kāi)發(fā)過(guò)程中最難的一件事是處理COM基本結(jié)構(gòu)。因此,為了簡(jiǎn)化COM開(kāi)發(fā),.NET框架實(shí)際上已自動(dòng)處理了所有在開(kāi)發(fā)人員看來(lái)是與“COM”緊密相關(guān)的任務(wù),包括引用計(jì)算、接口描述以及注冊(cè)。

必須認(rèn)識(shí)到,這并不意味著.NET框架組件不是COM組件。事實(shí)上,使用Visual Studio 6.0的COM開(kāi)發(fā)人員可以調(diào)用.NET框架組件,并且在他們看來(lái),后者更像是擁有iUnknown數(shù)據(jù)的COM組件。相反,使用Visual Studio.NET的.NET框架開(kāi)發(fā)人員則將COM組件視作.NET框架組件。

為了避免引起誤解,這里需對(duì)這種關(guān)系加以特別說(shuō)明:COM開(kāi)發(fā)人員必須手動(dòng)去做大多數(shù).NET框架開(kāi)發(fā)人員可以在運(yùn)行時(shí)自動(dòng)執(zhí)行的事情。例如,必須手寫COM組件的安全性模塊,且無(wú)法自動(dòng)管理模塊占用的內(nèi)存,而在安裝COM組件時(shí),注冊(cè)條目必須放進(jìn)Windows注冊(cè)表中。對(duì).NET框架而言,運(yùn)行時(shí)實(shí)現(xiàn)了這些功能的自動(dòng)化。例如,組件本身是自我描述型的,因而無(wú)需注冊(cè)到Windows注冊(cè)表中便能安裝。

.NET框架與COM+的關(guān)系

當(dāng)把COM與Microsoft事務(wù)服務(wù)器(MTS)和分布式COM(DCOM)結(jié)合在一起時(shí),就變成了COM+。COM+提供了一組面向中間層的服務(wù)。特別是COM+提供了進(jìn)程管理功能和數(shù)據(jù)庫(kù)與對(duì)象連接池處理功能。在將來(lái)的版本中,它還將提供一種稱為分區(qū)的功能——專門為應(yīng)用程序服務(wù)提供商設(shè)計(jì)的更強(qiáng)大的進(jìn)程隔離功能。

COM+服務(wù)主要面向中間層應(yīng)用程序開(kāi)發(fā),并主要為大型分布式應(yīng)用程序提供可靠性和可擴(kuò)展性。這些服務(wù)是對(duì).NET框架所提供服務(wù)的補(bǔ)充;通過(guò).NET框架類,可以直接訪問(wèn)這些服務(wù)。

看完上述內(nèi)容,你們對(duì)如何理解.NET框架與COM的背景和歷史以及關(guān)系的發(fā)展有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI