COM 過時了嗎?它的應用前景究竟如何?
com=組件對象模型。
雖然我知道微軟還有很多東西在用它,但是似乎這方面的需求越來越少了?各種招聘廣告上也很少見到要求com編寫能力的。它的應用前景究竟是什麼樣呢?
現在能跨語言的組件技術除了com還有啥?別提mozilla的xpcom了,跨不了幾個語言。就算是windows8里最新的winrt組件技術,一樣源自com。可以看看wrl和atl寫com的區別,一樣最先繼承自IUnknown,介面大同小異。
雖然現在已經很少使用com了,但沒覺得com技術過時了,反而進化成了winrt組件。
你們這些人啊,就是被java和C#的class教壞了。你看,interface代表的就是能力,QueryInterface代表的就是查詢一下這個東西有沒有這個能力。你們把它當class用,QueryInterface當dynamic_cast,不被噁心才怪了。COM把interface的思想發揮得淋漓盡致,各種概念設計十分正交。如果COM當初有CLR的那個跨binary的generic interface,我猜那些IEnumXXX什麼的(長得多像IEnumerator?那些返回IEnumXXX的函數是不是就是一個一個的IEnumerable屬性?),會變得更加好看,linq也會首先在它上面出現。
不過他還是有缺點的,就是他首先在C/C++上提了出來(這也導致了他沒有generic,而generic對於一個系統被正交地表達是不可或缺的,這也是噁心人的另一部分——不過用C/舊Java/舊C#/舊Delphi的都被噁心慣了,所以沒人提這件事)。你看別的語言,無論是D,Delphi,C#,甚至是C++/CLI,C++/CX,定義和使用COM的代碼多麼優美,優美到連微軟都得在native C++上面開發一個COM的語法糖——就是用#import來給COM介面們自動wrap上一層ComPtr這樣的東西的功能。
所以說@馮東 和@ototsuyume 被噁心是正常的,都被TMD java和C#的【一貫的錯誤的想法】慣壞了。
COM是微軟投入C++門下後給C++打的一個超大補丁用來解決C++的ABI沒有標準的問題,同時夾帶了讓全天下的程序員團結起來給VB程序員打工的私貨。
COM算是微軟裡面那幫所謂天才搞出來的晦澀難懂的東西,一般人玩不轉。當初COM紅火的時候,國內真正玩得轉COM的高手也找不出100人。當初無數人跟風買潘愛民的COM本質論,最後又有幾人堅持研究下去呢。天才玩的玩意,還真不是俺們常人能玩的。
當年SUN的Swing也是一個道理。
玩不好的東西,咱就不評價了。
技術永遠就沒過時的,越是所謂過時的,越是奇貨可居。說句人話就是,會的人越多,就越不值錢…作為開發過半年com的來說,的確過時了,無論技術還是思想。
首先com開發的難度太大,不光是調用不知所以然整天轉型的問題,考慮線程同步,他就沒有給出一個比較實用的模型。
思想上不符合模式的定義,人類難以讀懂難以記憶,維護非常困難。最後是他當中有很多陷阱,非常難以調試。關鍵還是現在比較現代的技術他都沒有。屬於20年前的產物。他在組件化技術還處於萌芽時代的時候是先進的,等到模式被普遍應用後就是個悲劇。現在還有人用的原因就是legacy,過去很多基於com的組件現在還有人在用,所以有人在用。
從技術上他已經死了,dcom之後再也沒更新過。至於有comptr的原因也是必須去調用過去的com組件,而不是com應該被移植到.net。最後微軟的東西,從技術和思想上普遍乏善可陳。如果你想走技術路線,gnu like的是一個不錯的起點。不用擔心學不會微軟的東西,等技術有了一定基礎後,你很容易就可以搞明白微軟的框架。這幾天恰恰在研究com,覺得com的思想很好,我個人認為學某種特定的應用不是關鍵,而是學他的思想,至少我認為com的思想不會過時
IBinder就是Android上的COM,目的就是讓整個系統的設計圍繞著一系列根據業務設計的"interface『』來組織。當然COM的目標更宏大,但我覺得根本就是這個。
即學即用吧,傳統的應用程序框架還是用得到。未來的趨勢不在那裡。
確實過時了,同底層耦合性太強,開發又複雜,對外的介面描述能力又不如新生的這些方案。看一項技術是否過時不要看是否還有人在用,而應該看該技術還有什麼樣的發展潛力。
看了其它似是而非的答案,我必須說出我的看法 COM 已經過時。
關於「有 Windows 就有 COM」-- 沒錯。不過 legacy 就是 legacy。Legacy 能存續很久,那也是 legacy。不消失和不過時是兩碼事。
關於「COM 的思想很好」-- COM 基本沒有原創思想。Indirect layer,ref-counting 都是很傳統的思路。而且 COM 實現這些想法很糟糕很糟糕。COM作為一個技術是過時了,但COM內涵的思想是不會過時的。
這種技術不被流行的原因,很大程度是因為該技術死板,二進位兼容有缺陷。c++中使用虛函數為介面的,並非理想介面的方式,而com就是依賴該技術的介面。微軟強推不見得就是好的。而才進貓方法才是更好的解決方案。
正在計劃學習com,五味雜陳啊
微軟仍然離不開COM,因為Windows需要它,但COM開發太複雜。如果你需要組件交互的話,.NET Framework是更好的選擇。
推薦閱讀:
※有哪些最經典有趣的編程通用習題可以給零基礎的人循序漸進地練習寫代碼?
※土豪程序員的生活是怎樣的?
※能用30種編程語言寫』hello world『的人算見多識廣嗎?還是說程序員都能做到?
※大家認為慕課,51學院,CSDN之類的it學習網站哪家質量最好?
※如何寫一個讓人看不懂的優雅的「Hello World」?
TAG:MicrosoftWindows | 編程語言 | 編程 |