Java和C#中的并行开发

我正在维护两个非常相似的调度程序 – 一个用Java,一个用C#。 C#版本最初是使用JLCA创建的,然后手动修改。 其他人在过去几周内对Java版本进行了相当大的修改(所以我必须追踪他的更改),我想知道是否要使用互联网上提供的工具之一进行重新转换,或者是否只是尝试每次需要时手动进行更改。 这个问题很可能经常出现在我身上 – 是否有某种方法可以用两种不同语言维护软件版本并尽可能轻松地保持它们的步骤?! 建议将不胜感激!

我使用现成的代码转换器以两种不同的语言维护项目时遇到了非常糟糕的经历(请注意,我没有说转换 ,我完全相信使用自动化工具进行初始转换/清理可能具有优点。)

有些人经常支持多个平台 , 他们喜欢在没有自己的内部工具的情况下指出语言选择的痛苦 ,但他们倾向于使用专门的语言或按照惯例将自己绑定到一组语言结构,以便他们的中间编译器可以为他们做咕噜咕噜的工作。

缺少一些很酷的专有交叉编译器,以及随之而来的代码约定,我会手工完成这项工作。 诀窍将是严密监控签入,并确保在两个地方都检查function。 根据问题的严重程度,你可以发明一个源控制过程(可能包括压迫和痛苦,相对较轻的重量),这可以帮助保证这一点(例如,你可以要求开发人员只检查一个分支的变化)直到端口在两个平台上完成,此时你将它们合并。)

我不确定这是否适合您,但您可能需要考虑使用Java进行开发,然后使用IKVM将jar文件转换为.NET程序集。 我已经好几年没用过了,但当时它的使用效果非常好。

我个人会亲自保持差异。 这意味着,如果在某些时候在.NET中执行不同的操作更有意义(可能就是这种情况,为了使代码惯用),您不需要手动重新应用该更改。

另一个选择是转换原始Java代码,复制它,然后转换修改后的Java代码。 区分两次转换的结果,并将该更改应用于您可以简单完成的现有代码。 这样可以避免在保留现有代码的同时进行“gruntwork”转换。

你考虑过J#吗?

根据您的需求和配置,您可以将Java代码交叉编译为Java和J#。 您可能需要将公共部分重构为一个单独的模块,将在任一环境中编译(J#卡在Java 1.2,有几个1.3类)。

请记住,J#已经过时了,在VS 2008中不再可用(您需要Visual Studio 2005的旧版本),但是根据项目的复杂程度,这可能是一个可行的解决方案。

如果它们如此相似,那么维护这两个版本是否有任何真正的优势? 也许你可以抛弃其中一个……