用于为重复性任务生成代码的脚本

时间:2012-01-18 06:42:13

标签: java

我使用jQuery + Spring + Hibernate堆栈很多。通常我发现自己开发复杂的接口并将它们一直集成到完整的堆栈,但有时我只需要创建简单的接口,允许在简单的数据库表上进行CRUD操作。逐个开发这些CRUD接口通常会成为一个重复的机械工作,也可以通过脚本轻松生成。理想情况下,我想给脚本提供表名,它应该生成从Hibernate实体到前端控制器(包括JSP)的所有必要类。

所以这是我的问题:

  1. 在这种情况下编写脚本是个好主意吗?它会涉及太多的复杂性(显然我看不太多但可能是我错过了一些观点)?
  2. 应该用什么语言来编写这样的脚本? (Java似乎太重了,我想动态语言应该更好地安装)
  3. P.S。我知道Spring Roo做了逆向工程,但我发现了几个瓶颈。

2 个答案:

答案 0 :(得分:1)

基于Lisp的语言是这种代码生成的非常流行的选择,因为它们是动态的homoiconic语言,遵循“代码就是数据”的原则。

因此,根据特定模板生成代码来完成任务通常并不困难 - 您只需编写一个扩展为您需要的代码的宏。宏只是一个常规函数,但它在编译时运行(生成所需的代码)而不是在运行时运行,因此您甚至不必学习不同的宏语言。

对于基于Java的堆栈,我强烈建议您查看Clojure,这对于代码生成和JVM上的“粘合代码”来说是一个很好的语言。

以下是您可以使用Clojure创建的数据DSL类型示例:Korma

(defdb prod (postgres {:db "korma"
                       :username "db"
                       :password "dbpass"}))

(defentity address)
(defentity user
  (has-many address))

(select user
  (with address)
  (fields :firstName :lastName :address.state)
  (where {:email "korma@sqlkorma.com"}))

正如您所看到的,可以使用相当简单的DSL编写相当复杂的数据库交互脚本。在幕后为您生成所有必需的样板代码:您只需要关注业务逻辑。

答案 1 :(得分:1)

代码生成器是重复性任务的良好解决方案。 生成代码时,Java不会太重。

您应该尝试使用此工具:https://sites.google.com/site/telosystools/ (免费/开源“数据库优先”代码生成器)

CRUD屏幕世代的教程:https://sites.google.com/site/telosystutorial/