代码之家  ›  专栏  ›  技术社区  ›  user26294

如何将遗留的Java/J2EE网站移植到现代脚本语言(PHP、Python/Django等)?

  •  4
  • user26294  · 技术社区  · 17 年前

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

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

    4 回复  |  直到 14 年前
        1
  •  11
  •   S.Lott    17 年前

    这是你必须做的。

    首先,确保你可以在跑步之前走路。建立一些简单的,可能与你的主要项目无关的东西。

    建立一个最终项目的一部分,并希望它将“演变”为最终项目。结果总是不好。为什么?你会犯愚蠢的错误。但是你不能删除或修改它们,因为你应该把这个错误演变成最终的项目。

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

    “等等,”你说。为了完成第一步,我必须选择一个框架。但是,步骤1包含允许撤消的决定。为步骤1选择错误的框架没有长期的负面影响。这只是学习。

    第三,用你的战略框架和一些经验,把你现有的站点分解成你可以用新的框架构建的碎片。从最重要的部分到最不重要的部分进行优先排序。

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

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

    对于每个生成,请执行以下操作:

    1. 将现有模型转换为django模型。这永远不适合您的传统sql。你必须重新考虑你的模式,修正老错误,修正你一直想改正的老错误。

    2. 编写单元测试。

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

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

    5. 选择有代表性的页面并将其重新制作到适当的模板中。您可以使用一些遗留的jsp页面。不过,不要浪费太多时间。使用html创建django模板。

    6. 规划url和视图函数。有时,这些视图函数将利用遗留操作类。不要“皈依”。从头重写。使用新的语言和框架。

    唯一值得保留的是数据和操作概念。不要试图保留或转换代码。这是误导。您可以将unittests从junit转换为python unittest。


    几个月前我给了这个建议。在这个过程中我不得不做一些指导和复习。修改后的网站正在运行。没有从旧技术的转换;他们从零开始做了建议的重写。开发商高兴。现场运作良好。

        2
  •  7
  •   Kyle Burton    17 年前

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

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

    另一种方法是将业务逻辑层转换为一组可通过标准rpc机制获得的服务-rest、soap、xml-rpc或其他一些简单的xml(yaml或json)over http协议(另请参见 DWR 这样,前端就可以对业务逻辑进行这些RPC调用。

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

    如果您的目标是从Java中完全迁移,那么这些方法中的任何一种都允许您在较小的步骤中这样做,您可能会发现这种混合比整体销售贬低更好——JVM具有大量的库并集成到许多其他系统中。

        3
  •  6
  •   TimB    17 年前

    使用自动化工具来“移植”web应用程序几乎肯定会保证将来的编程效率将降到最低,而不是提高。

    一个好的脚本语言可以帮助编程人员理解编程语言的良好编程习惯。自动化工具通常不是设计用来输出优雅或编写良好的代码,而是只输出工作正常的代码。

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

        4
  •  1
  •   Robert Fischer    17 年前

    这里给出的许多建议都是假设您(而且只有您)正在对应用程序进行完全重写。可能不是这样的,它改变了很多答案

    如果您已经开始使用j2ee,那么正确的答案是grails。简单地说:您可能已经有了hibernate和spring,您将希望能够以最小的痛苦在旧代码和新代码之间来回切换。这正是groovy的优点,在这方面它甚至比jruby更平滑。

    另外,如果你已经有了J2EE应用程序,你就已经有Java开发人员在四处游荡了。在这种情况下,学习groovy就像是从梯子上摔下来——从字面上来说。除了匿名内部类之外,Groovy是Java的纯超集,这意味着您可以编写Java代码,称之为Groovy,并完成它。当您越来越熟悉Groovy的特性时,可以将它们集成到Java ISH Groovy代码中。不久,您将编写非常Groovy的代码,甚至还没有真正实现转换。

    推荐文章