在此时,您将为.NET和Java之间的项目选择什么?[关闭]


13

您刚刚开始一个新项目,并且拥有Java和.NET这两种技术供您选择。您正在从事的项目不涉及具有可轻松在这两种技术之间进行选择的功能(例如,.NET具有我需要的功能,而Java则不需要),并且两者对您都可以正常工作(尽管您只能当然需要之一)。考虑到:

  • 性能
  • 可用工具(甚至是第三方工具)
  • 跨平台兼容性
  • 图书馆(尤其是第三方图书馆)
  • 成本(Oracle似乎尝试通过Java货币化)
  • 开发过程(最简单/最快)

还请记住,Linux不是您的主要平台,但您也想将项目移植到Linux / MacO。您绝对应该记住,围绕Oracle和Java社区而来的麻烦以及Mono和Java的局限性。如果在这两个方面都有经验的人都可以给出概述以及他们对选择哪个以及为什么的主观看法,将不胜感激。

java  .net  mono 

有关要求的信息不足,无法有效回答此问题。
红尘

3
单声道是一种痛苦(例如时间沉没)。甚至没有基本的WinForm设计器。
工作

实际上,@ Job是MonoDevelop的GTK#GUI设计器,因为WinForms尚未开源。
Mahmoud Hossam

是的,但是Mono与第三方库的关系如何?他们“工作”吗?并且(也许是最重要的)如果您将其与Mono一起使用,供应商会提供支持吗?
TMN

Answers:


26

唯一最重要的(编辑:技术)决定是:

  • 您此时是否愿意100%使用Windows作为将来的部署平台?

如果否,那么您应该使用Java。


Mono的结论经常被用来说“是的,.NET是跨平台的”。该要求的有效性如何?是Mono只是您针对它开发的一个IFF选项!

不能期望.NET应用程序可以立即使用。


@Basic说,这更多是评论而不是答案。准确地说我认为这是一个问题去上面的列表中,因为这也许就是你用.NET打交道时需要做的最重要的技术决策。正如Basic所说的那样,他将对Mono进行测试,这是不可行的,我认为Java和.NET同样适用。我对.NET的经验很少,但是对Java有很多了解。

  • 性能-Java运行良好,但是启动时间仍然很多。这是因为JVM在初始化时从头开始,并且当需要从磁盘读取时,运行时库jar文件的随机访问相当慢。最近的Java 6具有后台进程,试图将运行时库jar文件保留在磁盘高速缓存中,因此在需要时可以快速访问。

  • 可用工具。存在大量工具,并且有很多可用的高质量开放源代码。IBM提供了一些非常先进的工具,但是他们也花了很多钱。您可能想看看MyEclipse,他们将Java世界中最好的部分组合在一起,以低廉的价格获取它们,以谋生,以了解可用的东西。Netbeans有一个非常好的GUI编辑器。JDeveloper有一个不错的Swing调试器。Sun 6 JDK具有VisualVM,这是一个很好的入门级分析器,可以分析已经运行的程序(这是杀手级功能)。

  • 跨平台兼容性。很好,倾向于优秀。JVM非常非常可靠且可预测。仅当操作系统差异渗入时才显示问题-例如文件分隔符,文件名区分大小写和菜单行为。

  • 图书馆。有很多,其中许多都是免费的和可用的,但主要是用Java编写的,因为它是相当困难的书面非JVM语言代码拉。

  • 成本。Java基本上是免费提供的。Oracle表示,电动工具(最有可能来自JRocket)将付出一定的代价。另请注意,扩展支持(“ Java for Business”)也需要付费。非x86平台是一个垂死的品种,但是IBM有很多,并且IBM为它们提供了出色的Java实现。它被定价为操作系统的一部分-最有可能被更好地采用。

  • 开发过程。使用Java花费大量时间来研究和选择合适的技术并学习它,但是当我这样做时,我认为有很多技术可以很快发展。Java EE的最新版本提供了使用Facelets编写功能非常强大的网页的功能,这些网页的重新加载速度至少与PHP页面一样快。

我认为除非您不精通Java或.NET,否则您通过选择自己和组织最熟悉的技术节省时间和金钱。


14
谁能保证您在Windows上编写的Java程序将在其他任何地方运行?只需一个JNI调用即可打破该保证。CLI也是同样的问题-如果您使用非跨平台API,则会失去可移植性。因此,唯一可以保证可移植性的人就是您自己-程序员,无论您使用什么框架。
Mark H

3
@Thorbjørn,您相信当前的甲骨文吗?
radekg

12
+1是因为Thorbjørn表示,如果您不是100%致力于Windows,则应该使用Java,而不是必须使用Java。我同意-是的,Mono只是一个后备设备,但是如果您当前的计划不致力于Windows,则可以减轻痛苦,并使用打算在其他平台上运行的技术。我说这是.NET开发人员和.NET爱好者。
Carson63000

4
我想知道是否有任何尝试真正做到这一点的“单人共处”的下流者……

4
“ Java基本上是免费提供的(...)电动工具将付出一定的代价(...)扩展的支持也要付出一定的代价”。.NET完全一样,对吧?
Konamiman

19

好的,让我们尝试分解一下:

考虑到:

可用的性能工具(甚至是第三方工具)

Java和.NET平台都有大量可用的良好性能测试工具,我知道在Java空间中,有许多免费的开源工具可满足大多数情况。我不能代表.NET。

跨平台兼容性

Java在这里有一个优势-要使.NET在某些平台上运行,需要Mono项目(或类似项目)。我不确定Mono是否100%防弹和性能出色,希望其他人能够加入。

图书馆(尤其是第三方图书馆)

两者在这里都有强大的支持。最初,Java生态系统起了带头作用(实际上是一个免费的开源库,可提供您可能想到的任何东西),但是我想说.NET确实赶上了它的重要性(NHiberante用于持久性,NUnit用于单元测试)列举两个基本的+我确定还有更多的公制卡车)。

成本(Oracle似乎尝试通过Java货币化)

所有公司都在一定程度上尝试货币化,但是对于Java,我认为您的陈述有些误导。Java从版本6(OpenJDK项目)开始是开源的,并且Oracle并没有超越Sun所做的任何尝试将Java货币化的意愿。因此,是的,他们出售App服务器和JVM扩展(特别是管理扩展),但出售核心Java本身?不,他们永远不会(公开声明很多次)。

我认为MS和Oracle都可以从其repsepctive平台获得的间接收益中受益匪浅。

总拥有成本(TCO)?我什至不打算参加这场辩论,因为没有办法证明它(编程毕竟是一种创造性的人类活动)。我个人认为基于Java的系统往往具有较低的初始成本,因为在大多数情况下您可以自上而下地使用免费的开源堆栈。但是,大型企业倾向于选择支持合同,这样就可以使该特定利益无效。

开发过程(最简单/最快)

取决于您要构建的内容!我个人认为它们几乎相同,尽管目前C#在Java的核心语言中具有一些额外的功能。但是,使用JVM(Groovy,Scala,Clojure等)上的语言(与Java有多种互操作性),您可以拥有所需的所有语言功能。

.NET在构建Web前端“东西”方面有明显的优势(如果需要的话,可以进行快速应用程序开发),但是我认为JEE6和/或Spring和其他Web /应用程序框架已经大大缩小了差距。

还请记住,Linux不是您的主要平台,但您也想将项目移植到Linux / MacO。您绝对应该记住,围绕Oracle和Java社区而来的麻烦以及Mono和Java的局限性。如果在这两个方面都有经验的人都可以给出概述以及他们对选择哪个以及为什么的主观看法,将不胜感激。

如果您想移植到Linux,UNIX,尤其是Mac OS,那么如上所述,Java有优势。

希望有帮助!


4

考虑到您的要点列表,我会被拆分,这实际上取决于我需要构建的内容。

.Net在以下方面胜出:

  • 性能
  • 开发过程(最简单/最快)

Java在以下方面胜出:

  • 跨平台兼容性
  • 图书馆(尤其是第三方图书馆)

这些方面是吸引人的:

  • 成本(Oracle似乎尝试通过Java货币化)
  • 可用工具(甚至是第三方工具)

就所有意图和目的而言,.Net都是单一平台技术堆栈。是的,有Mono,但是直到Mono与Windows实现100%兼容,它才提供真正的跨平台体验。您唯一可以依靠跨平台支持的子集就是Silverlight中适合的子集。

就是说,.Net具有更好的感知性能(实际测量值待定)。在用户眼中,感知性能是唯一重要的事情。在过去十二年以上的时间里用Java开发过,最近又开发了.Net,我可以欣赏到该平台的强大功能。

另一方面,Java具有丰富得多的IDE集可供选择,这些高级IDE的成本比.Net变体的成本低得多。另一方面,专业的J2EE引擎的成本很容易使开发环境的成本相形见war。在.Net中,我有被ni死的感觉。在Java中,有一些针对巨大成本的变通方法-可以通过开发人员设置时间轻松弥补这些成本。在IDE之外,对于重要的工具(分析器,覆盖范围等),成本是相等的。

最后,它确实取决于需求。如果我还是要在Windows上进行部署,那么.Net毫无疑问。我有仅Windows商店的客户。如果我打算在Unix上进行部署或需要支持异构系统,那么Java毫无用处。我什至可能会很激进,建议采用混合技术。毕竟,仅仅因为客户端要求服务器是Unix,并不意味着他们在台式机上运行该服务器。并非每个应用程序都最好做成Web应用程序。


4

性能 -均匀

两种平台对于几乎所有应用程序都具有非常好的性能。

尽管我的主观经验是Java对于长时间运行的应用程序略有优势,但.Net在应用程序启动时间上更快,但并没有太大的区别。

可用工具(甚至是第三方工具) -值得商bat

取决于所需的工具和熟悉的工具。

.Net当然具有Microsoft提供的一些出色工具。另一方面,Java世界中也有同样好的工具,例如Eclipse,IntelliJ环境的Netbeans。

跨平台兼容性 -Java Win

.Net从根本上与Microsoft平台(Windows,Xbox等)相关。完整的实现不适用于任何非Microsoft平台

Mono很不错,但是实际上它不能为您提供完整的跨平台功能,因为它不支持所有.Net库(例如,您不能指望所有Windows GUI东西都能正常工作,因此除非切换到跨平台工具包(例如GTK#),您将无法在不同平台上运行您的应用程序)

Java是真正可移植的。不仅是语言,更重要的是所有Java库都是可移植的。如果您坚持使用纯Java库(例如,Swing for GUI),那么您的代码将在具有Java运行时环境的任何位置运行。

库(尤其是第三方库) -Java Win

Java平台的最佳优势可能是庞大的库生态系统,尤其是开源库。一些例子:

  • 所有的Apache库和工具
  • 广阔的Eclipse生态系统中的所有库
  • Google提供/维护的所有图书馆
  • JBoss和Red Hat维护的所有相关企业工具

成本(Oracle似乎尝试通过Java货币化) -如果您使用开源,则Java会获胜,否则,Even。

您可以拥有100%的开源Java堆栈,该堆栈是免费的,并且不会将您捆绑到任何特定的专有平台上。这是100%免费的。

或者,您可以购买IntelliJ IDEA,在Windows上运行Java并使用专有数据库,在这种情况下,它的费用与典型的Microsoft .NET堆栈几乎相同。

开发过程(最简单/最快) -值得商bat

这可能更多取决于开发人员在每种平台上的经验,而不是平台的特定属性。

.Net当然拥有一些出色的工具,可以使您在Windows上使用简单的GUI应用程序时非常高效。毫不奇怪,因为这是.Net开发的“最佳位置”。

另一方面,我更喜欢将Java堆栈用于服务器端开发。借助Maven之类的工具以及所有持续部署/集成功能,您可以为健壮的服务器端应用程序建立非常有效的开发流程。

语言方面的C#与Java相比具有一些生产力优势。但是另一方面,如果您现在在Java平台上进行开发,则趋势是不使用Java本身,而是使用Scala,Groovy或Clojure等新的JVM语言-如果这样做,您的工作效率将大大提高。而不是C#或Java。


3

。净

很难在没有主观或发火的情况下回答这个问题(我觉得我会被否决),但是.Net是一种正在兴起的语言,Java似乎因法律问题而陷入困境,而且变得不那么受欢迎。

如今,.net至今仍是一种更具凝聚力的现代语言,对多核(Parallel.net)和异步编程(反应性扩展)提供了出色的支持,更不用说我不能没有的LINQ。.Net也有许多免费工具,但是Visual Studio Express,Sql Server Express,Web Matrix等。

Java确实具有一些多平台优势。您可以为.Net和mono等提供一些选项,这些选项可能适用于传统应用程序或后端组件,但是如果您做的很专业,则有些不高兴(我们不讨论WPF)。

如果跨平台真的很重要,那么另一个选择是去Silverlight,我个人不是很热衷于Silverlight的“应用程序”,但是至少可以用。

跨平台是痛点,至少在这一点上,问问自己是否真的有必要。


首选.Net并不是一件坏事。我实际上很喜欢。毫无疑问,Java目前正面临身份危机,这真是令人遗憾-我也喜欢该平台。我很高兴您承认Java在跨平台(+1)方面的改进记录。一些客户端需要Unix部署,而其他客户端则需要Windows部署。Java人士可以为两个平台提供服务,而.Net实际上仅限于Windows。就是说,那里有很多Windows仅客户端。
Berin Loritsch 2011年

1

在组织中,此时,我们将选择Java。原因很简单:我们的Java团队比.NET团队更大,经验更丰富,工具更完善(.NET团队在维护现有系统方面也受够了,他们缺乏承担任何重大新项目的资源) 。
就是说,如果有紧迫的原因使用.NET(例如,客户要求,某些客户可能已经安装了.NET软件的庞大基础,并希望他们的新系统适合该基础,自己接管维护等),我们将这样做并雇用承包商从事无法释放自己的员工的工作。
我不会为了客户的最佳利益而将任何一种技术强加给客户,并且由于部署系统所需的投资(再次说,我们有一个已经有许多.NET应用程序正在运行,并有人员来支持这些应用程序,我们不会试图强迫他们雇用人员并购买硬件和软件许可证来在侧面运行Java应用程序,当然,相反我们也建议他们不要这样做(如果他们是根据要求来到我们的)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.