.NET是COM的替代品吗?

4

我希望了解.NET和COM的目的,

  • .NET是否与COM具有相同的目的?因为COM的主要目的是允许语言互操作性,那么.NET也是如此吗?
  • 如果是这样,为什么很多公司仍然在使用COM进行开发项目?
  • 当我们可以使用.NET时,学习COM是否值得?

相关:https://dev59.com/RnE95IYBdhLWcg3whOLK - Brian Rasmussen
2个回答

6
  1. COM的一个原因是,如果你在Borland C++ builder中开发了一个C++库,你不能在VB6中使用它。但你也不能在VC6中使用它(顺便说一下,COM比这些产品更古老)。因此,COM是一种类似于C的协议,用于应用程序和库之间的互操作性。.NET允许托管应用程序之间的互操作性。如果你想与C++进行互操作,请使用C++/CLI。但是,如果您有一个希望使用.NET组件的遗留COBOL应用程序怎么办?将该组件公开为COM将是一种方法。公开类似于C的API是另一种方法。

  2. 由于COM已经存在自20世纪80年代末期(我想),很多商业价值都建立在COM技术上。为了好玩而重写工作应用程序对企业来说毫无意义,成本和风险都太高了。因此,必须维护遗留应用程序的公司自然拥有大量基于COM的工具和应用程序。

  3. 这完全取决于您的业务案例。如果您可以仅使用.NET平台,我猜您不需要了解COM(尽管.NET平台使用COM,有时会泄漏错误)。如果您正在使用操作系统或其他库公开的COM库,了解一些基本的COM规则是有意义的。

PS. 我喜欢COM。我不喜欢注册部分,我不喜欢DCOM,我认为最终的COM公寓混淆了比它帮助开发人员更多的竞争条件和相关问题。但是核心COM相当不错。一些争论是关于“COM是否面向对象?”但这归结于我们为什么使用OO?我的看法是为了提供封装。因此,问题是:“COM是否提供良好的封装?”答案是肯定的(在我看来)。

PS. 最后我检查了一下Firefox使用了一个称为XPCOM的东西,对我来说它看起来很像COM。


我曾经和老板开玩笑说,C++ + COM 的能力很快就像 COBOL 的能力一样。这方面的工作不多,而且了解这方面的人更少,因此我们将能够根据这项技术所带来的巨大商业价值来设定自己的薪水。 - Just another metaprogrammer

1

您可能会对这个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将有助于解决那些低级别问题,但除非它是你的主要或次要职业重点,否则我不会花太多时间在它上面。


我会看这个,但我的第一反应是:不,不要再来了!!!将每个类都变成COM类在当时似乎是个绝妙的主意,但由于增加了开发成本,现在它真的很混乱。此外,我是否想将所有内部类都暴露给我们的用户?而且使用DCOM会使网络充斥着ping。对于Web服务而言,我认为情况更糟,因为Web服务的接口设计方式与内存中的类不同(Web服务通常使用粗方法以减少调用开销)。此外,Web服务可能随时消失,而内存对象则不会。 - Just another metaprogrammer
@FuleSnabel,当谈到一些更加啰嗦的绑定时,我不反对你的几点观点...也许阻止理论变为现实的一件事是需要将所有私有接口公开。解决这个问题的方法之一是将“Int”类作为WCF服务。如果发生了这种情况,那么也许您可以保持私有性。此外,您可能还想查看命名管道绑定以获得更高效率,但总体上的重点是使用WCF轻松实现并行编程,代价是每个线程的效率。 - makerofthings7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接