我非常喜欢那种时髦的语言,但我相信我的java体验正在引领我走向一条不完全有潜力的groovys的道路。
我有一个场景,一个groovy对象(Master.groovy)将一些json数据发送到某个视图,该视图从这些数据中创建一个表单。然后用户可以提交此表单,Master.groovy再次将其作为json-data接收。
Master.groovy可以访问从将json发送到视图时选择的不同表单描述池(formDesc1,formDesc2等)。当用户返回json数据时 - Master.groovy会将其传递给例如formDesc1来验证它。
这是代码的外观:
Master.groovy
class Master {
FormDesc[] formDescs = [new FormDesc1(), new FormDesc2(), new FormDesc2()]
def getJSONform(Integer formId){
return formDescs[formId].getForm()
}
def validateForm(Integer formId, def data) {
return formDescs[formId].validate(data)
}
}
FormDesc1.groovy
class FormDesc1 extends FormDesc {
static String name = "alias"
FormDesc1 (){
form.add(new InputElement(name:name, type:"text"))
form.add(new TextArea(name:"msg", rows:"12", cols:"12"))
}
@Override
def validate(data){
errors = []
if(data.get(name)["value"] != "form1")
errors.add("name not allowed")
return errors
}
}
FormDesc2.groovy
class FormDesc2 extends FormDesc {
static String name = "alias"
FormDesc1 (){
form.add(new InputElement(name:name, type:"text"))
form.add(new TextArea(name:"msg", rows:"12", cols:"12"))
}
@Override
def validate(data){
errors = []
if(data.get(name)["value"] != "form1")
errors.add("name not allowed")
return errors
}
}
包/表单中可以有很多表单,并且在内存中加载所有表单似乎是非常不必要的。如果formDesc由表示表单的json数据组成,然后只有方法validate,那就更好了。 E.g:
FormDescUltimate.groovy
class FormDescUltimate extends FormDesc {
form = loadJSONFile("formDescUltimate.json")
@Override
def validate(data){
errors = []
if(data.get("alias")["value"] != "form1")
errors.add("name not allowed")
return errors
}
}
formDescUltimate.json
{
'formId' : 'ultimate_form',
'elements': [
{'InputElement' : {'name': 'alias', 'type':'text'}},
{'TextArea' : {'name': 'msg', 'rows':'12', 'cols':'12'}}
]
}
是否有可能通过groovy很好地实现这一点,还是有更好的设计来实现这一目标?
提前致谢并对这篇长篇文章感到抱歉!