我们有一个中等规模的Java应用程序,需要进行一些重构。
我们正在考虑在Rails上迁移到JRuby。主要是因为Ruby on Rails提供的生产力以及将重新实现Web逻辑的许多现有插件。
然而,应用程序的很大一部分应该保留在Java中,我们不想重写所有业务逻辑(特别是因为它使用了许多Java技术,如RMI)。
我们的重构的一个关键点是清理我们的数据库管理,这是目前手工编写的SQL操作和存储在db4o中的一些对象的混合。
从JRuby我们可以调用任何遗留的Java代码。太好了!
然而,许多Ruby on Rails插件都假设使用ActiveRecord来管理数据库。 从Java访问ActiveRecord数据似乎并非易事。
哪个是在JRuby on Rails和遗留Java代码之间管理数据库的最佳策略?
你怎么看?
答案 0 :(得分:1)
JRuby是一门优秀的语言,但它确实是在Java虚拟机上运行的Ruby。可以集成遗留Java代码,但它不适合核心语言。
如果您对具有可靠Web框架的新动态语言感兴趣,我建议您查看Groovy和http://grails.org/。 Groovy是在JVM上构建的。您遗留的类可以是应用程序中的一等公民。我认为这可以更容易地迁移到新的东西,因为你可以重用你拥有的东西,重写你需要的部分。
答案 1 :(得分:1)
除了在Ruby中编写新代码之外,听起来你计划在Java方面进行相当多的重构。既然如此,我建议:
1)决定Java ORM:Hibernate或db4o,并在所有Java重构中继续使用它。就像我想说的那样,使用ActiveRecord来处理所有事情,这里的底线是说服JRuby使用Java ORM要比强迫你的Java代码使用ActiveRecord对象要容易得多。
2)至少有Hibernate和db4o的Ruby接口原型示例。找一个让你入门,然后根据需要添加它,以提供你需要的ORM功能。
3)不要担心期望ActiveRecord的Rails插件。并非所有人都这样做,并且将来会更少,因为Rails 3(Rails和Merb的合并)将ActiveRecord解耦。即使有一个你绝对必须拥有的插件确实需要ActiveRecord,那么呢?这只是Ruby代码。下载它,查看它的期望,并为ORM提供一个Facade类,以提供插件所需的方法。 (在这里我们看到了Ruby的美丽 - 只要它像一个人一样徘徊和嘎嘎叫,一个对象不需要<>鸭子)。或者,您可以修补插件以删除ActiveRecord依赖项,或者只是实现插件自己提供的功能。您的情况可能会决定哪种方法有意义。
答案 2 :(得分:1)
在不了解很多细节的情况下回答这是一个棘手的问题。
首先,完全可以在不使用ActiveRecord(AR)的情况下构建Rails应用程序。我做了几个 - 通常我使用控制器来运行脚本,读/写文件等,我相信这种方法是有效的。但是,由于您确实需要在数据库中处理数据,因此请注意保持MVC方法,无论您的M是AR还是其他方式。
如果你的数据库设计得很好,你就可以有一个混合的approch。例如,您的遗留Java可能会使用任何ORM生成报告数据并将其写入数据库,然后可以轻松地将表格包装在ActiveRecord模型中,以便通过Rails应用程序替换报告。这完全取决于您的Java代码所执行的功能与Rails代码所执行的功能(如果您的数据库设计适用于AR建模)。
如果你的rails应用程序和java代码需要直接将模型实例传递给彼此(即与通过数据库相反),那么混合方法可能无效。
我建议采用“试一试”的方法。尝试一些事情,看看你遇到麻烦的速度有多快。在这样的情况下,我觉得首先尝试在你的脑海中设计这一切并不是那么富有成效。
答案 3 :(得分:0)
仅供参考:O'Reilly的书“Enterprise Rails”对制作自己的Rails插件有一些很好的建议,这样你就可以找到/维护/重用你想出的任何技巧。狂野猜测:在O / R插件上制作,您可以选择使用它来放置在旧版Java代码之上吗?
或者,在数据库中创建一些魔法,以允许旧的Java神奇地读取“new and improved!”的结果。红宝石加工?!?我假设一个带有视图,触发器和访问权限的数据库。
祝你好运,我的回答并不是很好,但我对你的工作方式非常感兴趣。