基于以下标准开发桌面应用程序的语言/平台

时间:2009-01-22 01:27:26

标签: c# java .net c++ desktop-application

面对您可以自由设计的新应用程序的挑战,组建团队进行开发和管理:

  1. 您会选择哪种语言/平台?
  2. 为什么?
  3. 后台:桌面应用程序将控制硬件设备并执行计算,分析并显示其返回的数据。

    要求 :(重要性:10 =最重要)

    • 需要使用USB和/或以太网(9)
    • 与设备通信
    • 具备相关技能的工程师的可用性(8)
    • 优质IDE /工具的可用性(8)
    • IDE /工具的成本(7)
    • 资源的可用性,教程,支持(9)
    • 语言/ API /平台/框架的生命周期 - 即对该应用程序的投资将来会有多大的未来?......该产品具有 long 生命周期(10)
    • 跨平台(3)
    • 图书馆的丰富性和广度(9)
    • 应用程序需要能够解释脚本语言(6)
    • 单元测试(9)

    假设

    • 对于设备的USB变体,设备驱动程序将使用C / C ++
    • 编写
    • 申请将是一项全新的努力 - 从零开始
    • 现有工程师的背景是C / C ++,他们具有很强的OO能力。现有工程师愿意采用最佳语言/平台,并招聘具有适当技能的新工程师。

    候选名单(您可以添加):

    • 的Java / J2SE
    • C#/。NET
    • C ++ / wxWidgets的
    • C ++ / QT

    期待听到您的想法!

8 个答案:

答案 0 :(得分:11)

我的第一选择是C ++

  1. “语言的生命周期”......我认为C / C ++不会在任何时候出现。
  2. 支持与usb / ethernet / others的低级别通信
  3. 您已经拥有团队中的知识/技能
  4. 提供大量高质量的库/ IDE等

答案 1 :(得分:11)

老实说,我会根据您的要求选择Java(带有C的一小部分),原因如下。

  • Lifetime of language/API/platform/framework- i.e., how future-proof will the investment in this application be?... the product has a long life-cycle (10).这真的取决于你的意思。我真的无法想象Java正在消失,仅仅是因为它的巨大的安装基础。 C或C ++也没有消失,但在考虑C#的未来时,我总是想到VB6-to-VB.net迁移问题。

  • Will need to communicate with devices using USB and/or ethernet (9).虽然Java不是直接理想的,但它有JNI来完成这项艰苦的工作。你仍然需要一个C组件才能做到这一点(并且它会针对每个平台进行更改,但最好是将大部分代码写入一次 - 使用C,你可能会有大多数你的代码在每个平台上都在变化,而在C#中,是不是在Windows以外的其他平台上支持 ?另一个替代方案是JNA,它看起来像是"Python ctypes"用于Java(访问共享库和没有JNI接口层的DLL)。

  • Availability of resources, tutorials, support (9).所有语言都在网络上拥有巨大的资源横截面。

  • Richness and breadth of libraries available (9).你有Boost for C ++和跨平台的GUI,但它们是必须添加的东西 - 没有像Eclipse / Java那样内置于开发环境中。

  • Unit testing (9).与下面的工具可用性相同 - 有很多(免费)Eclipse插件可以自动进行单元测试。

  • Availability of engineers with relevant skills (8).你提到的所有语言都有过多的人(我喜欢用这个词)能够胜任的人。

  • Availability of quality IDE/tools (8).这是Eclipse。在我看来,没有两种方式。它的插件数量确实很大。 NetBeans可能看起来更好但我宁愿拥有功能而不是外观(我的妻子也是如此,所以很幸运: - )。

  • Cost of IDE/tools (7). Eclipse是免费的。

  • The application will need to be able to interpret a scripting language (6).最后我听说,Java现在包含JavaScript作为内置函数以及开发人员add their own scripting engines的能力。

  • Cross-platform (3). C#,没有(尽管存在Mono,我仍然认为它有可能会在某一天与MS发生冲突,并且FOSS世界将会因此而努力MS协会)。

答案 2 :(得分:6)

我会选择C#,原因如下:

  • 在语法方面相对于C ++最近;
  • 如果unsafe块需要,可以直接访问内存;
  • 现代用户界面,开发成本低于任何C ++ UI框架;
  • 高技能可用性;
  • 感谢Microsoft和其他人,几乎所有的库(包括USB);
  • Visual Studio相对便宜;
  • 预期寿命长:.Net相当成熟(7年以上)和“字节码平台”(主要包括Java)具有最佳长期前景的那个;
  • 通过DLL轻松集成本机代码。 Java / JNI(从经验来讲)更加尴尬;和
  • 单元测试框架。

老实说,我认为C ++桌面应用程序的时代已经过去了。在开发过程中,它们太容易出错且相对昂贵(相比之下)。

C#/ .Net解决方案唯一缺少的是跨平台(Mono尽管如此)。我不知道你有多大的优惠,但你只把它列为3。

答案 3 :(得分:4)

就个人而言,我会为低级硬件接口选择C ++或C(or maybe even D),但后来我将这个代码包装在一个漂亮,干净的API中,并且我会写所有面向用户的GUI内容在C#中使用WPF和XAML。

编写设备驱动程序所需的技能组将与GUI开发人员的技能组完全不同(特别是如果您想提供丰富的图形图表和报告。那么无论如何您可能会有两个不同的团队(即使他们是非常小的团队,并且以不同(但兼容)的语言实现这两个层将提供一个很好的机制来强制分离这些层之间的关注点。

答案 4 :(得分:4)

如果我现在正在发布一些内容,那么C ++ / wxWidgets就会赢得胜利。这种组合非常便于携带,并且可以满足您的所有可用性和成本问题。

下个月初,如果我没记错的话,Qt将根据LGPL许可证发布。我自己从未使用它,但我听到有几个人赞美它;许可证要求是阻止我查看它的唯一因素。它可能与wxWidgets一样好,满足您的需求。

据我所知,这些都没有处理脚本或单元测试。

我将使用Python作为脚本语言。它作为其他程序的嵌入式脚本语言享有良好的声誉。

我从未找到过我喜欢的单元测试框架,因此我不推荐使用。

答案 5 :(得分:3)

  

桌面应用程序将控制硬件设备

C ++

答案 6 :(得分:3)

我看到这里有很多C#人, - C#:在Windows以外的其他平台上运行不佳。所以这是一个坏主意。算了吧。 - Java:不适合设备驱动程序,并且仍然比C或C ++慢。 Java有一些不错的功能,但是很多人都在思考如何高度关注它。 - VB:你为什么要用它?

我可能会使用C ++ / Qt,唯一的缺点是Qt如果是商业产品需要花钱,如果它不是免费的话。你说你的团队已经具备了C ++经验,所以不应该很难学会如何使用Qt。这将在Windows,Linux和Mac上运行并且看起来非常好。 Ide不是Qt的问题,Trolltech正在开发一个你可以使用的跨平台ide,或者你可以使用Visual Studio,eclips或其他C ++ ide。

答案 7 :(得分:2)

我投票给C#。即使有了远离C ++的学习曲线,您的开发人员也应该更高效,工具和库也很棒。

我认为C#增加项目复杂性的唯一地方是与USB设备接口,但是很容易通过P / Invoke和/ C ++ / CLI来快速展示您的C / C ++驱动程序.NET。