唐山网站建设系统,导购网站怎么做的,网站项目报价单模板,在征婚网站上认识做期货java转换为c#由于各种原因#xff0c;我最近完成了一个将复杂的财务应用程序从C#xff03;转换为Java的项目。 港口的原因大部分是非技术性的#xff0c;而是对相关企业的一项战略举措。 这是一次有趣的经历#xff0c;我在此过程中吸取了一些经验教训#xff0c;可以分… java转换为c# 由于各种原因我最近完成了一个将复杂的财务应用程序从C转换为Java的项目。 港口的原因大部分是非技术性的而是对相关企业的一项战略举措。 这是一次有趣的经历我在此过程中吸取了一些经验教训可以分享这些经验。 1.在现有系统上构建语言中立的测试。 我将从最重要的一课开始。 移植系统时由于任何原因这可能是任何端口因此必须具有确定该端口是否成功的标准。 最好的方法是围绕原始系统构建一整套测试这些测试可以“ 无需更改即可导出”到新系统。 因此例如如果要将系统从Java迁移到不支持JUnit的另一种语言则没有一套JUnit测试是不好的。 我无法强调在没有干预的情况下将测试的更改从字面上从旧系统复制到新系统有多么重要。 JUnit测试的另一个问题是它们通常与现有的实现紧密地联系在一起。 由于将要重写实现因此测试无法在实现之间移植。 我们选择的并且非常有效的策略是使用Cucumber测试。 几乎所有语言都有Cucumber的绑定IDE至少是IntelliJ和Visual Studio都很好地支持了Cucumber此外该测试是人类可读的。 这样您可以让非技术用户参与测试的准备工作以为端口做准备。 顺便说一句我们试图通过记录旧系统所做的所有工作并围绕这些需求构建测试来让用户定义新系统的需求但这不足为奇这并不令人意外。基于构建测试用例要好得多而不是尝试为新系统发明它们。 使用Cucumber确实是成功的每当系统之间存在差异时我们都会创建一个新的测试。 到完成时我们已经有了大约1000种方案我们对新系统的正确性充满信心。 它为我们提供了坚实的基础我们需要继续开发新系统中的其他功能和重构。 2.尝试并使尽可能多的翻译自动化。 当面对超过25k行的C时考虑将每行手动转换为Java是一件非常艰巨的任务。 幸运的是那里提供了非常有用的工具。 我们使用的产品来自有形软件解决方案 。 花了几百美元它实际上节省了数百个工时。 无论如何它都不是完美的但是它将为您提供Java代码的结构部分代码允许将C中的类的代码拆分为多个文件并尝试了使您可以使用的Java。 在我们的案例中几乎没有任何生成的代码可以实际编译但这确实是一个很好的起点。 我的类比是OCR的早期尝试。 您可以扫描文档但是当您在编辑器中打开文档时会发现许多未正确识别的单词带有红色下划线。 这是要遍历所有红色底线并弄清楚单词应该是什么的问题。 自动翻译产生的代码大同小异当它被导入IDE时会出现许多编译器错误。 有时自动化过程会保留在原始C中并说无法自动完成翻译。 值得称赞的是该工具总是偏向于保守它从未对所产生的Java犯错这一点很重要。 3.不要着急翻译 运行自动翻译后您将需要返回代码并手动修复编译错误。 如果我有时间我将花费10倍以上的时间来确保对代码所做的每一次更改都是绝对正确的。 由于我不是C专家所以有时我会假设C库的工作方式。 这些假设并不总是正确的有时我会付出沉重的代价来调试场景如果我在原始译文中更加小心一点就永远不会有问题。 花时间阅读要翻译的类的CAPI绝对值得。 我发现在使用Date和DateTime对象时这一点特别重要。 花时间学习Visual Studio IDE也是值得的。 并行调试时如果您知道如何正确使用IDE从长远来看将节省时间。 4.使用Java 8 除了使用Java 8的所有显而易见的原因这是Java的最新版本所以为什么不使用它……之外Stream API也可以很好地映射到CLinq。 语法略有不同例如Java使用-和C使用 但是使用Java 8的新功能确实有助于保持代码的可比性这在进一步调试时都很有帮助。 5.注意意外行为 语言的某些功能是您不应该依赖的但可能会完全一样。 让我举一个我花了太多时间的例子来说明。 C代码使用的是Dictionary 代码生成器将Dictionary正确翻译为HashMap 。 两者都是无序地图。 但是即使在Dictionary遍历Dictionary时没有按合同对Dictionary进行排序也存在OrderedDictionary 它似乎仍可以保留插入顺序。 HashMap并非如此并且由于元素的顺序对于结果HashMap 因此我们发现了难以调试的差异。 解决方案是用确实保留顺序的LinkedHashMap替换HashMap所有实例。 6.不要过早重构 从代码生成器生成的代码不是很漂亮。 实际上要查看它几乎是可怕的违反了有关命名约定等的几乎所有规则。随着时间的流逝它很容易整理。 抵制这种诱惑直到所有单元测试都通过为止。 您以后总是可以整理一下。 重构甚至重命名可能会引入错误尤其是在定义上您不熟悉的代码库中。 同样您可能决定在某个地方重新运行代码生成器并且所有整理工作最好都需要合并最坏的情况是浪费时间。 结论 即使您不太熟悉C将相当复杂的程序从C转换为Java也不是没有可能。 使用正确的工具和技术严格地进行可靠和可重复的测试将对您的项目成功产生重大影响。 翻译自: https://www.javacodegeeks.com/2015/05/lessons-learnt-translating-25k-line-of-c-into-java.htmljava转换为c#