【问题标题】:Mixing up languages and technologies: Is it a good idea? [closed]混合语言和技术:这是个好主意吗? [关闭]
【发布时间】:2013-05-17 06:16:43
【问题描述】:

请看下面的设计。它是一个框图,用于显示组件

请注意,这是一个桌面应用程序的图表。您在这里看到的是组件,而不是类。以下是说明

C++/CLI code - The main GUI and the connector for all other services
OpenCV C++ Code - set of Opencv classes for image and video processing
C++ SMS Code - set of SMS classes written in C++

C# wrapper DLL - The dll to access the driver
C# Driver DLL - The driver of the device, written in C#
Speech recognition C# dll - set of speech recognition classes

Google Map DLL/JAR - Google map classes written in either C# or Java

Device - The device I need to access

现在,我的问题。

如您所见,这是技术和语言的集合。对我来说,用 c# 编写所有语音代码似乎很容易,而不是将它们移动到 C++/CLI(其他 C# dll 必须是 C#)。但是,我觉得与其他 C++ 代码集成的 dll 太多了。 我无法在 C# 或 Java 中创建 GUI。我必须实现 Opencv(主要的东西),最简单的方法是 C++。

那么,像这样混合语言和技术是否可以/很好,就像混合一样?

【问题讨论】:

    标签: c++ visual-c++ architecture


    【解决方案1】:

    如果解决方案为您提供了您想要的期望和性能,并且易于维护,那么我认为它没有问题。如果你看一下 Linux,它是建立在许多经常链接在一起的小程序之上的,所以将 C++ 与 perl、php、ruby、C 代码等一起使用并不罕见。

    例如,OSX 需要在 Objective-C 中编写 UI(可可)代码,而驱动程序使用 C++ 和 C 中的内核扩展。

    【讨论】:

    • 哇!我很高兴知道!无论如何,我也会等待其他成员的更多想法:)
    • 非常感谢您的回复。来自我的 +1 :)
    【解决方案2】:

    我会放弃 JAR 并在那里使用 .Net 类。添加 Java 没有任何好处。

    我会将整个 C# 块集(语音、映射、驱动程序、包装器)移动到它们自己的进程中,并定义一个 IPC 协议(可能是 TCP/IP 到 localhost)以与 C++ 部分进行通信。我会保留在本机 C++ 中。因此,您拥有一个纯 C++ 进程和一个纯 C# 进程。

    作为 IPC 协议设计的一部分,我会隐藏 SMS 和 Speech 块的详细信息。您应该能够在不引起对方注意的情况下替换实现。

    【讨论】:

    • IPC?嗯,那么这就变成了一个基于网络的项目,不是吗?
    • 不,ipc是进程间通信(en.wikipedia.org/wiki/Inter-process_communication)。 @MSalters您必须考虑延迟。如果它们不是问题,我会选择单独的流程解决方案。帮助定义干净的接口。