4

我想将遗留的 Java Web 应用程序 (J2EE) 迁移到脚本语言 - 任何脚本语言 - 以提高编程效率。

最简单的方法是什么?是否有任何自动化工具可以转换大部分业务逻辑?

4

4 回答 4

11

这是你必须做的。

首先,确保你可以在跑步之前步行。构建一些简单的东西,可能与您的主要项目相关。

不要构建最终项目的一部分,并希望它会“演变”成最终项目。这永远不会奏效。为什么?你会犯愚蠢的错误。但是你不能删除或重做它们,因为你应该把这个错误演变成最终的项目。

接下来,选择一个框架。什么?第二?是的。第二。在您真正使用某些脚本语言和框架做某事之前,您对正在做的事情没有真正有用的概念。一旦你建立了一些东西,你现在就有了一个明智的意见。

“等等,”你说。“要执行第 1 步,我必须选择一个框架。” 真的。但是,第 1 步包含您可以撤销的决定。为第 1 步选择错误的框架不会产生长期的不良影响。这只是学习。

第三,利用您的战略框架和一些经验,将您现有的网站分解为可以使用新框架构建的部分。从最重要到最不重要对这些部分进行优先级排序。

不要将整个转换计划为一个大型项目。它永远不会起作用。它使一项大工作变得比必要的复杂。

我们将使用 Django 作为示例框架。您将拥有模板、视图函数、模型定义、URL 映射和其他详细信息。

对于每个构建,请执行以下操作:

  1. 将现有模型转换为 Django 模型。这永远不适合您的旧 SQL。您将不得不重新考虑您的模型,修复旧错误,纠正您一直想纠正的旧错误。

  2. 编写单元测试。

  3. 构建转换实用程序以导出旧数据并导入新模型。

  4. 构建 Django 管理页面来触摸和感受新数据。

  5. 选择有代表性的页面并将它们重新加工成适当的模板。您可能会使用一些遗留的 JSP 页面。但是,不要为此浪费太多时间。使用 HTML 创建 Django 模板。

  6. 规划您的 URL 和视图功能。有时,这些视图函数将利用旧的操作类。不要“转换”。从头重写。使用您的新语言和框架。

唯一值得保留的是数据和操作概念。不要试图保留或转换代码。这是误导。您可以将单元测试从 JUnit 转换为 Python 单元测试。


几个月前我给出了这个建议。在处理过程中,我必须做一些指导和审查。修改后的站点已启动并正在运行。没有旧技术的转换;他们从头开始进行了建议的重写。开发商高兴。网站运作良好。

于 2008-10-14T01:43:21.440 回答
7

如果您已经在 J​​ava 中实现了大量业务逻辑,那么我为您看到了两种可能性。

第一种是使用在 JVM 中运行并具有 Web 框架的高级语言,例如Groovy / GrailsJRubyRails。这允许您直接利用您在 Java 中实现的所有业务逻辑,而无需重新构建整个站点。您应该能够利用该框架在 Web 开发方面提高的生产力,并仍然利用您现有的业务逻辑。

另一种方法是将您的业务逻辑层转换为一组可通过标准 RPC 机制使用的服务 - REST、SOAP、XML-RPC 或其他一些基于 HTTP 协议的简单 XML(YAML 或 JSON)(另请参阅DWR),以便前端可以对您的业务逻辑进行这些 RPC 调用。

第一种方法在 JVM 上使用高级语言可能比第二种方法更少重新架构。

如果您的目标是从 Java 完全迁移,那么这两种方法中的任何一种都允许您以更小的步骤进行迁移 - 您可能会发现这种混合方式比完全弃用更好 - JVM 有很多库并且集成得很好进入许多其他系统。

于 2008-10-14T00:45:59.060 回答
6

使用自动化工具“移植”Web 应用程序几乎可以肯定地保证未来的编程效率将被最小化——而不是提高。

当了解该语言良好编码实践的优秀程序员使用时,良好的脚本语言可以提高编程效率。自动化工具通常不是为输出优雅或编写良好的代码而设计的,只输出有效的代码。

只有在您努力重新实现 Web 应用程序之后,您才能获得编程效率的提高——由于重新实现所需的时间,这可能会或可能不会导致整体改进。

于 2008-10-14T00:36:30.233 回答
1

这里给出的许多建议都假设您——而且只有你自己——正在对应用程序进行全面重写。这可能不是这种情况,它改变了很多答案

如果您已经开始使用 J2EE,那么正确的答案是 Grails。很简单:您可能已经有了 Hibernate 和 Spring,并且您希望能够以最小的痛苦在旧代码和新代码之间来回切换。这正是 Groovy 的强项,在这方面它甚至比 JRuby 更流畅。

此外,如果您已经有了一个 J2EE 应用程序,那么您已经有 Java 开发人员在工作。在这种情况下,学习 Groovy 就像从梯子上掉下来——字面意思。除了匿名内部类之外,Groovy 是 Java 的纯超集,这意味着您可以编写 Java 代码,将其称为 Groovy,然后就可以使用它了。随着您对 Groovy 的优点越来越熟悉,您可以将它们集成到您的 Java 式 Groovy 代码中。不久之后,您将编写非常 Groovy 的代码,甚至还没有真正意识到这种转变。

于 2008-10-20T18:05:01.643 回答