我的公司刚刚要求我在 Clojure 中重写一个较大的(50,000 行代码)Java 应用程序(一个使用 JSP 和 servlet 的 Web 应用程序)。有没有其他人知道我应该注意什么?
请记住,我非常了解 Java 和 Clojure。
更新
我进行了重写并投入生产。很奇怪,因为重写最终进行得如此之快,以至于它在大约 6 周内完成。因为不需要很多功能,它最终还是更像是 3000 行 Clojure。
我听说他们对这个系统很满意,它完全按照他们的意愿行事。唯一的缺点是维护系统的人必须从头开始学习 Clojure,他被拖入其中,又踢又叫。前几天我确实接到了他的电话,说他现在喜欢 Lisp 了……很有趣 :)
另外,我应该好好提一下 Vaadin。使用 Vaadin 可能会像 Clojure 一样节省大量时间和缩短代码。Vaadin 仍然是我使用过的顶级 Web 框架,尽管现在我正在愤怒地学习 ClojureScript! (请注意,Vaadin 和 ClojureScript 都在幕后使用 Google 的 GUI 框架。)
最佳答案
最大的“翻译问题”可能是从 Java/OOP 方法论到 Clojure/函数式编程范式。
特别是,“Clojure 方式”不是在对象内具有可变状态,而是明确地分离出可变状态并开发纯(无副作用)函数。你可能已经知道这一切了:-)
无论如何,这种理念往往会导致某种“自下而上”的开发风格,您将最初的努力集中在构建正确的工具集来解决您的问题上,然后最后将它们组合在一起。这可能看起来像这样
这大致是我将要解决的问题的顺序,因为它广泛地代表了代码中依赖项的顺序,因此适用于“自下而上”的开发工作。当然,在良好的敏捷/迭代风格中,您可能会发现自己很早就推进到可演示的最终产品,然后经常跳回到早期步骤以根据需要扩展功能或重构。
附言如果您确实遵循上述方法,我会很高兴听到需要多少行 Clojure 才能匹配 50,000 行 Java 的功能
更新 :由于这篇文章最初是写的,因此出现了一些属于“必须检查”类别的额外工具/库:
关于Java 到 Clojure 重写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5232654/