11

随着办公室人员配置的一些变化,C# 专业知识水平急剧下降,现在有更多的 Java 开发人员。它已经到了高层正在考虑将用 C# 编写的现有 .NET 项目转移到 Java 世界的地步。

除了完全从头开始的明显问题之外,这家公司还有哪些可能的方法可以成功地将项目的开发从 .NET C# 迁移到 Java?

4

15 回答 15

19

以下是需要考虑的事项:

  • 这是一个大项目吗?如果是,请尝试坚持使用 C#
  • 这个中型项目是否包含组件?如果否,请尝试坚持使用 C#
  • 这个小项目是不是只能部署在 Windows 上?如果是,请尝试坚持使用 C#
  • 这是旧的源代码吗?如果是,请尝试坚持使用 C#
  • 您是否使用 Windows 操作系统特定的 API?如果是,请尝试坚持使用 C#
  • 您是否使用任何没有 Java 对应的第三方 API?如果是,请尝试坚持使用 C#
  • 您是否在“深度”(数据绑定、用户控件等)中使用 .Net?如果是,请尝试坚持使用 C#
  • 迁移时间比获得新的/转换的 C# 人员更容易接受吗?如果不是,请尝试使用 C#
  • 如果您要使用会更改表示的 Java 框架,您认为最终用户不会接受更改吗?如果是,请尝试坚持使用 C#
  • 检查广告

如果您决定转换:

  • 去每个组件
  • 每层走
  • 有很多测试
  • 检查是否有工具可以帮助(无论帮助可能很小)迁移
于 2009-04-11T19:36:32.340 回答
15

只是为了补充 Brian 和 Eric 的观点,我想说,在我看来,为 Java 开发人员学习 C# 应该很简单。它们在概念上是非常相似的语言,我建议培训您的 Java 开发人员以获得一些 C# 技能,这样您就不会被迫进行迁移过程的麻烦。

于 2009-04-11T19:17:31.590 回答
5

我同意 Joel 的观点,即完全重写几乎总是一个错误。其他海报是正确的:C# 和 Java 非常相似,任何有能力的 Java 开发人员都应该能够在几周或几个月内胜任 C#。这并不是说他们将成为专家。这需要更长的时间,但只要您有一些可以指导该过程的 C# 开发人员,那么您应该没问题。

如果不了解您的应用程序的具体细节:大小、应用程序的类型、行业等,就很难评论这种转换是一个好主意还是坏主意。

对于这样的转换,我会非常谨慎,因为以我的拙见,C# 现在是一种比 Java 更现代的语言,我作为一个已经是 Java 开发人员十多年的人(自 1.0.2 /1.1 天)。

这并不是说 Java 不好。它不是。Sun 确实有一片乌云笼罩着它,并且近年来表现出不愿或无法推动该平台向前发展。

于 2009-04-12T00:27:25.620 回答
4

不管涉及哪种语言,这家公司的管理听起来很疯狂。除了一个微不足道的应用程序之外,从头开始重写整个代码库而不是仅仅雇用一个具有一定语言技能的人,这在经济上是如何明智的呢?这是一家有众所周知的问题的企业:多余的现金吗?!

现有代码开发了多长时间?如果它刚刚开始,我可以理解这一点。如果它已经发布并且有活跃用户,那么丢弃它是没有意义的。如果您将 C# 代码捐赠给具有正确技能的初创公司,请考虑一下他们对您的领先优势。

于 2009-04-11T20:26:41.627 回答
4

在完成将 .NET 项目转换为 Java 之前,所有参与转换项目的 Java 开发人员都将学习 C#。因此,您不再需要将其转换为 Java(并且您可以丢弃在转换中生成的所有 Java 代码),因为现在您拥有一个可以同时使用 Java 和 C# 的开发团队。问题解决了。:D

于 2009-04-11T20:54:52.370 回答
2

如果有任何组件已经被隔离或其中任何一个使用面向服务的架构,您可以想象一次迁移一个组件(其中每个单独的组件都是重写)并且仍然让组件使用相同的组件相互通信可互操作的网络协议。可能取决于我们正在谈论的应用程序类型。

于 2009-04-11T19:04:50.607 回答
2

确保你有大量的测试,因为这样的迁移会在你最不期望的地方咬你。

于 2009-04-11T19:10:33.133 回答
1

您在生产中是否有更多 .Net 或更多 Java 应用程序。如果您已经对 .Net 服务器和应用程序进行了大量投资,为什么不要求 Java 开发人员中的志愿者迁移到 .Net?语言和语法非常相似,所以难的部分是学习框架,除非他们将所有时间都花在 UI 开发上,否则即使学习框架也不是那么难。

在我们的办公室里,我们有许多非常优秀的开发人员,他们根据需要在 Java 和 .Net 之间来回切换。

于 2009-04-11T19:16:50.983 回答
1

为了向管理层证明,你总是需要谈论投资回报率和数字。向他们表明,如果您移动这些应用程序,这将花费大量时间和 QA 资源,并且如果由于某些其他项目或新开发的重要性而被取消优先级,则很容易退居二线。

当我向他们展示时间表、投资回报率、所涉及的工作、所涉及的资金等时,我取得了成功。

所以现在进入实际点,我确实认为 Java 开发人员将能够支持 C#,除非他们对 Microsoft 技术有一些基本的心理障碍。

于 2009-04-11T19:48:23.667 回答
1

看看Net2Java,它可以帮助您将代码从 C# 转换为 Java。我怀疑它会是完美的,但它是一种从任务中消除大量苦差事的方法,让您摆脱不兼容的框架调用和语言特性的问题。

完成此操作后,您的任务就像任何其他大型迁移项目一样 - 测试、测试和再次测试。单元测试、系统集成测试,然后是最终用户测试。您应该已经拥有与原始应用程序一起使用的那些测试,除了单元测试之外,它们仍然是相关的。

于 2009-04-11T19:48:33.387 回答
1

如果决定这样做,您很可能会从混合方法中受益,您可以在同一个应用程序中基本上混合 C# 和 Java,因为它会将场景从瀑布转换变为逐步迁移。在这里,我知道两种可能性:

1) ikvm ( http://www.ikvm.net/ ),它允许您在 .NET 运行时运行 Java 代码。这允许 Java 代码调用 C# 代码,反之亦然。然后您可以冻结 C# 代码开发,并在保留功能应用程序的同时将修改后的功能慢慢添加到 Java 部分。

2) Mainsoft ( http://dev.mainsoft.com/Default.aspx?tabid=130 ) 允许您将 .NET 字节码编译成 Java 字节码。他们有一个免费的入门版本。我没有使用该产品的经验,但他们在我们只有 Java 的平台上做了大量广告。

于 2009-04-12T23:53:54.600 回答
0

我不是 Java 专家,但根据我作为 C# 粉丝使用 Java 代码的经验,以下是一些可能令人头疼的问题:

  • 泛型在 Java 和 C# 中的实现方式不同。
  • Java 和 C# 的装箱/拆箱行为不同
  • Java 类命名约定 + 大量 C# 生成的代码
  • 根据移植的 Java/C# 代码的质量,字符串处理(即 Unicode/ASCII 问题)可能会出现问题。

就个人而言,我不认为从头开始写作是一个坏主意。因为你已经有了一个工作架构。

于 2009-04-11T19:37:12.273 回答
0

我有点惊讶,甚至没有人提出拒绝移民的想法。

我不相信 C# 开发人员可以被迫切换到 Java(反之亦然),因为他被告知(好吧,如果他受到枪威胁,那么可能)。我需要花费大量时间、锻炼和热情来掌握至少一种技术堆栈。您不能一夜之间就开始使用新技术并期望提供相同的质量。

在被告知开始迁移之前,我个人不会打扰。那时我会告诉经理我是 .NET 人,不会仅仅因为他们决定改用另一种技术。

至于技术方面,不同的不是语言语法,而是库及其特性。当然,如果 .NET 3.5 的所有最新的花里胡哨的东西都已被广泛使用,那么语言差异将为您带来真正的挑战。

这当然是一种有趣的方式,只需决定将应用程序从 .NET 迁移到 Java。有人不知道所涉及的麻烦...

于 2009-04-11T20:17:22.023 回答
0

可能你可以使用jni4net - 开源网桥?或我知道的其他选项列表。

于 2010-12-14T00:09:40.367 回答
0

我意识到这是一个老问题,但对于其他走这条路的人,你可以试试这个开源 C# 到 Java 转换器:

http://www.cs2j.com/

于 2021-03-25T05:38:28.327 回答