【问题标题】:Is .NET replacement for COM?.NET 是 COM 的替代品吗?
【发布时间】:2011-03-29 20:19:48
【问题描述】:

我想知道 .NET 和 COM 的用途,

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

【问题讨论】:

标签: com .net .net-3.5 .net-4.0


【解决方案1】:

您可能会觉得这个 Channel9 视频很有趣。微软 COM/WCF 专家 Juval Lowy 表示,让每个类都成为 WCF 服务可能是有意义的,类似于 DCOM

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 服务通常使用厚实的方法来减少调用开销)。此外,网络服务可能会在任何时候消失,内存中的对象不会。
  • @FuleSnabel 在谈论一些更闲聊的绑定时,我不同意你的一些观点......也许阻止理论成为现实的一件事是需要将所有内容设为私有接口公开。解决此问题的一种方法是使“Int”类成为 WCF 服务。如果发生这种情况,那么也许您可以将您的私人隐私保密。此外,您可能希望查看命名管道绑定以获得更高的效率,但总体而言,以牺牲每个线程的效率为代价,轻松允许使用 WCF 进行并行编程。
【解决方案2】:
  1. 使用 COM 的原因之一是,如果您在 Borland C++ builder 中开发了 C++ 库,则无法在 VB6 中使用它。但是您也不能在 VC6 中使用它(顺便说一句,COM 比这些产品老得多)。所以 COM 是一种类似于 C 的协议,用于应用程序和库之间的互操作性。 .NET 允许托管应用程序之间的互操作性。如果您想与 C++ 互操作,请使用 C++/CLI。但是,如果您有一个希望使用 .NET 组件的遗留 COBOL 应用程序,您会怎么做?将该组件公开为 COM 将是处理它的一种方法。公开类似 C 的 API 是另一种方式。

  2. 自 80 年代末(我认为)COM 出现以来,COM 技术已经建立了很多商业价值,这并不奇怪。仅仅为了好玩而将工作应用程序重写为 .NET 没有任何商业意义,而且成本太高且风险太大。因此,必须维护遗留应用程序的公司自然拥有大量基于 COM 的工具和应用程序。

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

PS。我喜欢COM。我不喜欢注册部分,我不喜欢 DCOM,而且我认为最终的 COM 公寓比它对开发人员的帮助更多(它最初是为了帮助开发人员避免竞争条件和相关问题而开发的)。但是核心COM相当不错。一些战斗已经结束了“是 COM OO 吗?”但这归结为我们为什么要使用 OO? IMO 给予封装。所以问题是:“COM 是否提供良好的封装?”。答案是肯定的(IMO)。

PS。最后我检查了 Firefox 使用了一种叫做 XPCOM 的东西,它在我看来很像 COM。

【讨论】:

  • 我曾经和我的老板开玩笑说,C++ + COM 能力很快就会像 COBOL 能力一样。工作不多,但知道它的人更少,因此我们将能够设定自己的薪水,因为与这项技术相关的商业价值非常多。
猜你喜欢
  • 1970-01-01
  • 2011-03-17
  • 2010-10-31
  • 2017-01-24
  • 2010-09-13
  • 2010-11-17
  • 2013-09-09
  • 2019-10-06
  • 1970-01-01
相关资源
最近更新 更多