我怎么能重构我的方法?

时间:2017-11-23 14:46:04

标签: javascript oop typescript refactoring

我有代码并且考虑让它变得更加纯净和干净。

我觉得在方法中摆脱多个回报会很好。

怎么可能被重构? 也许我应该使用一些模式? 请指教。提前谢谢。

class Test{    
          private client;
          private concreteMixer;
          constructor(client, concreteMixer){
            this.client = client;
            this.concreteMixer = concreteMixer;
          }

          public method(){
            let form = new Form();
            if(form.isSubmitted()){
              if(form.isValid()){

                let field = form.getField();
                let infoField = this.client.testField(field);
                if(!infoField){
                  form.setError('This is not valid field');
                  return form;
                }

                let coffee = this.concreteMixer.makeСoffee();
                //two days have passed
                if(!coffee){
                  form.setError('I want coffee');
                  return form;
                }

                this.concreteMixer.pourInThermosBottle();
                //two days have passed

                return coffee;
              }
            }

            return form;
          }
        }

1 个答案:

答案 0 :(得分:0)

我会这样做

    /**
     * Comment
     */
    class Test {
      /**
       * Comment
       */
      protected client;

      /**
       * Comment
       */
      protected concreteMixer;

      /**
       * Comment
       */
      constructor(client, concreteMixer) {
        this.client = client;

        this.concreteMixer = concreteMixer;
      }

      /**
       * Comment
       */
      public method() {
        const form = new Form();

        // Comment
        if (!form.isSubmitted() || !form.isValid()) {
          return form;
        }

        // Comment
        const field = form.getField();

        // Comment
        const infoField = this.client.testField(field);

        // Comment
        if (!infoField) {
          form.setError(ERROR_CODE_01);

          return form;
        }

        // Comment
        const coffee = this.concreteMixer.makeСoffee();

        //two days have passed
        if (!coffee) {
          form.setError(ERROR_CODE_02);

          return form;
        }

        // Comment
        this.concreteMixer.pourInThermosBottle();

        // two days have passed

        return coffee;
      }
    }

我将let发生的地方替换为const。当你的变量没有改变使用const时。何时使用let

如果您遇到以下情况:

if (something) { 
   ... a lot of lines
} 

// end of function

您可以使用:

 if (!something) { 
    return;
 } 

所以你赢得了很多行的缩进级别。

使用错误代码而不是直接错误字符串。因此,您应用的用户可以通过编程方式对待它。

评论您的代码以解释发生了什么。因此,如果一个编码人员或您的未来自己发现这个代码,它将更容易理解。至少:该课程做什么? method做什么?

我将private替换为protected,所以如果有一天你想从你的班级继承,你可以不经进一步改动就这样做。