在JBoss Seam+ExtJS项目中,用Groovy代替Java编写Seam组件,可以让Java更像JavaScript,用JavaScript的感觉去写Java程序变成现实,使代码简洁清晰。在客户端UI层,通过引入命名空间(namespace)机制和编程约定,可以让JavaScript更像Java, 提高JavaScript程序的可读性和可维护性。
1.让Java更像JavaScript
(1)创建类实例
JavaScript:
var addBtn = new Ext.Toolbar.Button({ text : '新建', tooltip : '新建角色', icon : Divo.getIconAdd(), cls : 'x-btn-text-icon', handler : addRole })
Groovy:
def doc = new DocumentUser( userId : 1L, docId : 1L, canRead : 1, canWrite : 0 ))
(2)类中的方法定义
JavaScript:
function onRoleMainted(subj, msg, data) { ... }
Groovy:
def addPermissions(ss, userId) { ... }
(3)声明类属性
JavaScript:
Divo.app.role.Role = function() { var actions var meta, smartGrid, grid, ds, selModel, tb ... }()
Groovy:
class ContentDragServiceTest { def _service def nodeC1,nodeC11,nodeC12,nodeC111,nodeC112,nodeC113 ... }
2.让JavaScript更像Java
(1)与Java中的包(package)机制类似,在JavaScript中引入命名空间,避免对象名冲突
Groovy:
package com.divo.doc.service class DocumentService { ... }
JavaScript:
Ext.namespace("Divo.app.role") Divo.app.role.Role = function() { ... }
(2)JavaScript中,约定js文件名等于类名或对象名,目录名对应命名空间名
(3)JavaScript中,大小写约定与Java一致
Groovy:
def createDir(Document obj) { def dir = testing?DIR:AppUtil.getRootDir()+DIR if (!(new File(dir+obj.dirName)).exists()) { if (!(new File(dir+obj.dirName)).mkdir()) throw new Exception("无法创建目录"+dir+obj.dirName) } }
JavaScript:
function init() { oRoleForm = Divo.app.role.RoleForm Divo.subscribe(Divo.app.role.ROLE_MAINT, onRoleMainted, this) createHTML() createGridMeta() createGrid() }
(4)JavaScript中,不用分号作为语句结束符,与Groovy一致。