表格的时髦设计模式

时间:2015-12-30 09:09:52

标签: groovy

我非常喜欢那种时髦的语言,但我相信我的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很好地实现这一点,还是有更好的设计来实现这一目标?

提前致谢并对这篇长篇文章感到抱歉!

0 个答案:

没有答案
相关问题