diff --git a/notes/重构.md b/notes/重构.md index 772db892..0e697888 100644 --- a/notes/重构.md +++ b/notes/重构.md @@ -13,7 +13,7 @@ * [1. Duplicated Code(重复代码)](#1-duplicated-code重复代码) * [2. Long Method(过长函数)](#2-long-method过长函数) * [3. Large Class(过大的类)](#3-large-class过大的类) - * [4. Long Parameter List(过长的参数列)](#4-long-parameter-list过长的参数列) + * [4. Long Parameter List(过长的参数列表)](#4-long-parameter-list过长的参数列表) * [5. Divergent Change(发散式变化)](#5-divergent-change发散式变化) * [6. Shotgun Surgery(散弹式修改)](#6-shotgun-surgery散弹式修改) * [7. Feature Envy(依恋情结)](#7-feature-envy依恋情结) @@ -170,9 +170,9 @@ double getTotalCharge() { 重构后整体的类图和时序图如下: -

+

-

+

# 重构原则 @@ -232,6 +232,10 @@ double getTotalCharge() { # 代码的坏味道 +本章主要介绍一些不好的代码,也就是说这些代码应该被重构。 + +文中提到的具体重构原则可以先忽略。 + ## 1. Duplicated Code(重复代码) 同一个类的两个函数有相同表达式,则用 Extract Method 提取出重复代码; @@ -244,21 +248,25 @@ double getTotalCharge() { ## 2. Long Method(过长函数) -间接层的价值:解释能力、共享能力、选择能力; +函数应该尽可能小,因为小函数具有解释能力、共享能力、选择能力。 -分解函数的原则:当需要用注释来说明一段代码时,就需要把这部分代码写入一个独立的函数中。 +分解长函数的原则:当需要用注释来说明一段代码时,就需要把这部分代码写入一个独立的函数中。 Extract Method 会把很多参数和临时变量都当做参数,可以用 Replace Temp with Query 消除临时变量,Introduce Parameter Object 和 Preserve Whole Object 可以将过长的参数列变得更简洁。 -条件和循环往往也需要提取到新的函数中。 +条件和循环语句往往也需要提取到新的函数中。 ## 3. Large Class(过大的类) -过大的类做了过多事情,需要使用 Extract Class 或 Extract Subclass。 +应该尽可能让一个类只做一件事,而过大的类做了过多事情,需要使用 Extract Class 或 Extract Subclass。 -先确定客户端如何使用它们,然后运用 Extract Interface 为每一种使用方式提取出一个接口。 +先确定客户端如何使用该类,然后运用 Extract Interface 为每一种使用方式提取出一个接口。 -## 4. Long Parameter List(过长的参数列) +## 4. Long Parameter List(过长的参数列表) + +太长的参数列表往往会造成前后不一致,不易使用。 + +面向对象程序中,函数所需要的数据通常内在宿主类中找到。 ## 5. Divergent Change(发散式变化) diff --git a/pics/2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png b/pics/2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png new file mode 100644 index 00000000..1659fdae Binary files /dev/null and b/pics/2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png differ diff --git a/pics/9d549816-60b7-4899-9877-23b01503ab13.png b/pics/9d549816-60b7-4899-9877-23b01503ab13.png new file mode 100644 index 00000000..9c4e04cc Binary files /dev/null and b/pics/9d549816-60b7-4899-9877-23b01503ab13.png differ