【问题标题】:C# Design Choice - COM object or just another class?C# 设计选择 - COM 对象或只是另一个类?
【发布时间】:2013-08-09 02:01:20
【问题描述】:

现有软件使用 C++ 将通信层编码为单个对象。 Microsoft COM 对象用于将通信对象连接到 UI 的上层。它使用 COM 对象公开接口。

新软件需要我创建一个完全不同于现有通信对象的通信对象。我可以选择在 C# 中将其编码为一个单独的类,或者创建另一个 COM 对象并重新使用一些 C++ 代码来创建对象。

作为一名 C 本地人,我想先听听您的建议,然后再决定如何进行未来的软件更改。我觉得如果我创建另一个 COM 对象,似乎没有必要,因为上层的 C# 类可以处理它。但后来我可以重用一些代码。

谢谢!

【问题讨论】:

  • 不要再使用 COM。我不知道您在寻找什么,但 COM 仅适用于互操作场景 请通过提供示例 use caseusage scenario 或其他内容进一步澄清一下。
  • 所以现有的 COM 是我们移植过来的遗留软件。新软件使用 C#(UI 层),通信层使用 C++。因此,选择 COM 是因为我们不想将图层重新写入 C#。现在我们需要使用另一个通信协议添加到通信层,我想知道是将它添加为另一个 COM 还是简单地将它放在 C# 层中。 C#(UI 层)将同时使用这两种协议与两个外部设备进行通信。
  • 让我再澄清一点,目前总共有 3 层,UI、App 和 Communication。应用程序用 C# 编码,通信层用 C++ 编码。通信层是 C# 使用的 COM dll。新软件需要添加与当前通信层完全不同的附加功能。我正在讨论该怎么做..
  • 我的观点仍然成立。新代码应该用 C# 编写,除非 lower level 代码(例如设备驱动程序等)必须用 C++ 编写。
  • 这里没有技术障碍,COM 是纯基于接口的对象模型。您可以对 COM 服务器进行任何实现,只要它实现相同的接口即可。语言也无关紧要,在 C++ 或 C# 中可以正常工作。唯一的细节是客户端传递给 CoCreateInstance() 的 {guid},它确定了它想要使用的特定 COM 服务器。

标签: c# c++ architecture com


【解决方案1】:

我觉得如果我再创建一个 COM 对象,似乎没有必要,因为上层的 C# 类可以处理它。但后来我可以重用一些代码。

这里没有正确的答案。如果重用量很大,那么坚持使用 COM 的“遗留”方法可能是一个合适的选择。

如果您要重用 5% 的代码,并且无论如何都必须从头开始实现其中的绝大部分,那么更简单的 API(只是将所有内容都放在 C# 层中)可能是更好的选择。

话虽如此,这完全取决于您和您的团队来确定最佳的前进方式。一般来说,使用 COM 会使整体设计更加复杂,因此需要根据现有代码的可重用性权衡成本/收益分析。

【讨论】:

  • completely different communication object that is radically different from the existing communication object。听起来好像没有太多可重用的可能性。
  • @HighCore 是的,但是 OP 仍然明确提到有重用的机会。不幸的是,没有足够的细节来了解可用的重用水平。
  • 详细逻辑不能用,但操作理念100%可复用。可以说它们都是用于与外部设备通信的对象,但是使用的协议不同。你知道与简单的类相比,使用 COM 是否有性能损失?另外,如果我选择在 C# 层中使用一个类,我会以某种方式打破软件的原始架构,允许 C# 层(UI 层)直接访问外部接口。
  • @user2584960 任何时候通过 COM 都会对性能产生影响。将逻辑保留在一个“域”或另一个(纯托管或纯本地)中比必须跨越该边界执行得更好。如果您要重用 concepts,而不是 code,我会说只使用 C#,特别是如果它将完全从 C# 端使用。
  • @user2584960 I somehow break the original architecture of the software by allowing C# layer (UI layer) to have direct access to the external interface - 不正确。您可以通过正确编码来保持关注点分离,“C# 层”不一定是纯 UI 层。
猜你喜欢
  • 1970-01-01
  • 2011-09-08
  • 2011-09-10
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多