auto commit
This commit is contained in:
parent
1634228ad3
commit
c9fd81f261
26
notes/重构.md
26
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() {
|
||||
|
||||
重构后整体的类图和时序图如下:
|
||||
|
||||
<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//4440ad24-625b-489a-96c1-e5ab1b06a30f.png"/> </div><br>
|
||||
<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//9d549816-60b7-4899-9877-23b01503ab13.png"/> </div><br>
|
||||
|
||||
<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//8c139711-3500-4f71-8456-c1adaf429ad0.png"/> </div><br>
|
||||
<br><div align="center"> <img src="https://github.com/CyC2018/InterviewNotes/blob/master/pics//2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png"/> </div><br>
|
||||
|
||||
# 重构原则
|
||||
|
||||
@ -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(发散式变化)
|
||||
|
||||
|
BIN
pics/2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png
Normal file
BIN
pics/2c8a7a87-1bf1-4d66-9ba9-225a1add0a51.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
BIN
pics/9d549816-60b7-4899-9877-23b01503ab13.png
Normal file
BIN
pics/9d549816-60b7-4899-9877-23b01503ab13.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
Loading…
x
Reference in New Issue
Block a user