《重构:改善既有代码的设计》读书笔记5 简化函数调用

(1)Rename Method 函数改名

一个真正的编程高手,起名的水平至关重要。

(2)Add Parameter 添加参数

(3)Remove Parameter 移除参数

(4)Separate Query From Modifier 将查询函数和修改函数分离

某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改。

范例:(Example)

有这样一个函数:一旦有人入侵安全系统,它会告诉我入侵者的名字,并发送一个警报。如果入侵者不止一个,也只发送一条警报:

  String foundMiscreant(String[] people){

      for (int i = 0; i < people.length; i++) {

          if (people[i].equals ("Don")){

             sendAlert();

             return "Don";

          }

          if (people[i].equals ("John")){

             sendAlert();

             return "John";

          }

      }

      return "";

  }

该函数被下列代码调用:

  void checkSecurity(String[] people) {

      String found = foundMiscreant(people);

      someLaterCode(found);

  }

-》

 String foundPerson(String[] people){

       for (int i = 0; i < people.length; i++) {

           if (people[i].equals ("Don")){

              return "Don";

           }

           if (people[i].equals ("John")){

              return "John";

           }

       }

       return "";

   }


  void sendAlert(String[] people){

      if (! foundPerson(people).equals(""))

          sendAlert();

  }

  void checkSecurity(String[] people) {

      foundMiscreant(people);

      String found = foundPerson(people);

      someLaterCode(found);

  }

在同一个动作中完成检查和赋值。这是否和Separate Query from Modifier 互相矛盾呢? 我曾经和Doug Lea 讨论过这个问题,并得出结论:两者并不矛盾,但你需要做一 些额外工作。将查询动作和修改动作分开来仍然是很有价值的。但你需要保留第三个函数来同时做这两件事。这个「查询-修改」函数将调用各自独立的查询函数和 修改函数,并被声明为synchronized 时。

原文地址:https://www.cnblogs.com/zdcsmart/p/12511096.html