如何减少此功能的样板?

沃格

在我的qooxdoo应用程序中,我有4个按钮。登录,注销,注册和配置文件。每个按钮都有一个动作类。这些类是从通用抽象类中子类化的。通过使用命令模式,每次单击按钮时,我都会调用相应类的execute函数。该功能看起来像这样

    execute: function() {
        var contentString = "login-form";
         //do some generic stuff

        if (win.getContentString() === contentString) {
          //do some generic stuff

        } else {
            var content = new myapp.apps.userActions.SLoginForm();
            //do some more generic stuff

        }
    }

该execute函数必须在所有4个子类中实现,唯一改变的是变量content和contentString。

我正在考虑使用工厂函数,并且每次都基于contentString变量返回适当的对象。

execute:function(){
    var contentString = "login-form";
    this.doTheGenericStuff(contentString);
},

doTheGenericStuff: function(contentString){
    //do the generic stuff
    var content = this.getTheObject(contentString);
    //do some more generic stuff
},

getTheObject: function(contentString){
    switch(contentString){
          case "login-form": 
               return new myapp.apps.userActions.SLoginForm();
          break;
          case "register-form":
               return new myapp.apps.userActions.SRegisterForm();
          break;
          //etc
    }
}

尽管这看起来还可以(尚未进行测试),但我不太喜欢它,因为每次添加新操作时,我都必须更新工厂功能。还有其他更聪明的方法来实现这一目标吗?也许我不知道的javascript的某些功能?

DJ

我认为在这种情况下使用模板方法模式更为合适。

因此,在您的抽象类上,您有:

getMyContentString: function() { return "login-form"; //or any default value },

getMyContent: function() { return new myapp.apps.userActions.SLoginForm() },

execute: function() {
        var contentString = getMyContentString(); // to be overridden
         //do some generic stuff

        if (win.getContentString() === contentString) {
          //do some generic stuff

        } else {
            var content = getMyContent();
            //do some more generic stuff

        }
    }

而且每个子对象只需要提供相应的getMyContentString()getMyContent()

本文收集自互联网,转载请注明来源。

如有侵权,请联系debugcn@gmail.com 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何减少此功能的样板?

来自分类Dev

如何使用Kleisli减少样板

来自分类Dev

如何减少此功能中的代码混乱?

来自分类Dev

如何减少模块中的样板配置?

来自分类Dev

F#:减少此功能

来自分类Dev

如何减少每个类中的Logger.getLogger(...)样板

来自分类Dev

样板太多,如何减少POJO生成器?

来自分类Dev

减少日志记录的样板

来自分类Dev

如何减少此StringBuilder函数?

来自分类Dev

如何减少此CSS代码

来自分类Dev

减少redux-thunk样板

来自分类Dev

减少Flutter中的dispose()样板?

来自分类Dev

如何减少ABS功能的数量

来自分类Dev

如何使用减少功能代替重复功能?

来自分类Dev

如何优化此功能

来自分类Dev

如何阅读此功能?

来自分类Dev

如何创建此功能?

来自分类Dev

如何应用此功能?

来自分类Dev

如何修复此功能?

来自分类Dev

如何在单个项目存在的列表理解中减少模式匹配的样板

来自分类Dev

如何使用map和reduce减少play框架json读取的样板代码?

来自分类Dev

如何减少react-redux样板-我尝试创建ComponentFactory,但出现React-redux错误

来自分类Dev

Symfony 2:如何减少此代码?

来自分类Dev

如何减少此JavaScript中的代码重复?

来自分类Dev

如何减少此JavaScript中的代码重复?

来自分类Dev

如何减少或注入此代码中的工作

来自分类Dev

如何按组减少此数据帧?

来自分类Dev

减少C ++模板代码上的样板代码

来自分类Dev

减少测试中的Spring ContextConfiguration样板