對於初學者來說COM是個定義不是十分清楚的概念,它既代表一種組件規範又代表一種實現,簡而言之COM是一種誇語言層的組件模型,由於不同的開發環境常需要相互協作來完成某種功能,進而促使了COM的出現,COM是以二進位形式存在,它是核心是由windows系統來支援的而不是某種開發工具平台。其設計完全是以OOP設計方法來實現,這樣開發人員就可以更加關待對象而不是某個dll中的函數調用和組織,從另一個方面說這樣開發人員就可以關注對象所代表的業務實現和其相關對象的關係了.COM是具體實現非常複雜不是簡單幾句能說清的,但是關鍵的一點需要知道的是應該程式和COM組件的通訊是以RPC方法實現,方法調用的Boxing和UnBoxing再加上其伺服器(MTS)的實現又實現了分布式模型,MTS主要是控制安全,協調事務.
COM+的底層結構仍然以COM為基礎,它幾乎包容了COM的所有內容,COM+綜合了COM、DCOM和MTS這些技術要素,它把COM組件軟體提升到應用程式層而不再是底層的軟體結構,它通過作業系統的各種支援,使元件物件模型建立在應用程式層上,把所有組件的底層細節留給作業系統,因此,COM+與作業系統的結合更加緊密。 COM+不再局限於COM的組件技術,它更加註重於分布式網路應用的設計和實現。COM+繼承了COM幾乎全部的優勢,同時又避免了COM實現方面的一些不足,把COM、DCOM和MTS的編程模型結合起來,繼承了它們的絕大多數特性,在原有的特性上增加了新的功能:如COM+擴充了MTS安全模型,它允許開發人員或管理員指定到方法級的安全控制,通過COM+對象環境資訊,使得COM+的安全模型更為有效細緻.COM+支援MTS的事務語義,不僅可以通過SetAbort或SetComplete完成事務操作,而且COM+還支援BYOT(BringYourOwnTransaction),即允許COM+組件參與非MTS交易處理環境管理的事務;COM+繼承了MTS對象池的概念,並且真正實現了對象池的功能,COM+不僅繼承了原有的多數特性,而且還增加了一些服務,比如Server Load Balancer(在DCOM時代,這是由MTS負責的,也可以說這是整合MTS後的必然結果)、佇列服務、記憶體資料庫、事件服務等。佇列服務對於分布式應用非常有意義,特別是在現在網路速度很慢的情況下,這種機制可以保證應用系統能夠可靠地運行。在應用系統包含大量節點但伺服器又繁忙的情況下,客戶應用程式可以把它們的請求放到隊列中,當伺服器負載比較輕的時候再處理這些請求; 又如COM+提供了Server Load Balancer服務,它可以實現動態Server Load Balancer,而且COM+應用程式的Server Load Balancer特性並不需要編寫代碼來支援,客戶程式和組件程式都可以按通常的方式實現。獲得Server Load Balancer特性並不是用程式設計的方式來實現的,而是通過配置實現分布式應用程式的Server Load Balancer,如上所講的佇列服務,其實也反映了一種Server Load Balancer。 在COM+中採用了一種稱為MMC標準介面環境管理程式。它類似於MTS的管理程式,但並不完全一樣,每一個COM+應用可以包括一個或多個COM+組件以及與應用有關的角色資訊。通過COM+管理程式,我們可以設定COM+應用和COM+組件的屬性資訊,比如組件的事務特性、安全特性等等。
此樓回複Re:
最大差別,就是Com可以是有狀態的,Com+則必須是無狀態的。什麼叫做有狀態,就是調用對象的方法時可以多線程重入,什麼叫做多線程重入?就是多個線程在使用同一個Com對象的時候不會發生存取違規。
Com+是運行在系統提供的一個進程空間,Com則是運行在調用者進程或者一個獨立的使用者進程中。
Com+要保持私人資料(會產生狀態),必須使用內容物件,而不能使用私人成員。