我希望了解.NET和COM的目的,
- .NET是否与COM具有相同的目的?因为COM的主要目的是允许语言互操作性,那么.NET也是如此吗?
- 如果是这样,为什么很多公司仍然在使用COM进行开发项目?
- 当我们可以使用.NET时,学习COM是否值得?
COM的一个原因是,如果你在Borland C++ builder中开发了一个C++库,你不能在VB6中使用它。但你也不能在VC6中使用它(顺便说一下,COM比这些产品更古老)。因此,COM是一种类似于C的协议,用于应用程序和库之间的互操作性。.NET允许托管应用程序之间的互操作性。如果你想与C++进行互操作,请使用C++/CLI。但是,如果您有一个希望使用.NET组件的遗留COBOL应用程序怎么办?将该组件公开为COM将是一种方法。公开类似于C的API是另一种方法。
由于COM已经存在自20世纪80年代末期(我想),很多商业价值都建立在COM技术上。为了好玩而重写工作应用程序对企业来说毫无意义,成本和风险都太高了。因此,必须维护遗留应用程序的公司自然拥有大量基于COM的工具和应用程序。
这完全取决于您的业务案例。如果您可以仅使用.NET平台,我猜您不需要了解COM(尽管.NET平台使用COM,有时会泄漏错误)。如果您正在使用操作系统或其他库公开的COM库,了解一些基本的COM规则是有意义的。
PS. 我喜欢COM。我不喜欢注册部分,我不喜欢DCOM,我认为最终的COM公寓混淆了比它帮助开发人员更多的竞争条件和相关问题。但是核心COM相当不错。一些争论是关于“COM是否面向对象?”但这归结于我们为什么使用OO?我的看法是为了提供封装。因此,问题是:“COM是否提供良好的封装?”答案是肯定的(在我看来)。
PS. 最后我检查了一下Firefox使用了一个称为XPCOM的东西,对我来说它看起来很像COM。
您可能会对这个Channel9视频感兴趣。微软COM/WCF专家Juval Lowy表示,将每个类都变成类似于DCOM的WCF服务可能是有意义的。
http://channel9.msdn.com/shows/ARCast.TV/ARCastTV-Every-Class-a-WCF-Service-with-Juval-Lowy/
该链接认为,在易用性和开发便利性方面,为了长期考虑,会在性能方面做出妥协。随着这种趋势的持续,对低级别COM/DCOM编程的需求也将减少。当然,这并不涵盖每种情况,但它确实涵盖了许多非关键业务需求。
你应该学习COM吗?就目前而言,WCF(以及.NET的其他部分)是基于COM构建的。了解COM将有助于解决那些低级别问题,但除非它是你的主要或次要职业重点,否则我不会花太多时间在它上面。