---
# System prepended metadata

title: 重構和文件

---

# 重構和文件

1. api swagger 文件（要有input/output)
    1. by rd, junior主要處理
2. sequential diagram
    1. by pm
    2. 所有的商業邏輯
    3. 一段文字來描述這些sequential diagram在做什麼
    4. 通常不會有文件描述api、server在做什麼（因為也沒人看）
    5. 每一頁一定有wireframe:
        1. 每個button的功能、放在哪裡, 名字 etc

eg:
```sequence
Alice->Bob: Hello Bob, how are you?
Note right of Bob: Bob thinks
Bob-->Alice: I am good thanks!
Note left of Alice: Alice responds
Alice->Bob: Where have you been?
```

不用每個variable, function

## Friday Case Study
現有 舊php專案
要做 Friday2.0
先看舊code. 看清楚業務邏輯（但不會細到每一行code在做什麼）
eg: 訂單成立了, 會成立一張付款單, 再產生一張物流單 之類

重構步驟：
要 重構 + 新功能加入
1. PM協助RD釐清這個功能要做什麼事情
2. RD 看code
3. 去掉明顯是爛的code
4. 整理邏輯, 合成module


分module
- 每個module unit test
- eg 取得訂單(驗證訂單有什麼欄位, 算錯, 編號格式), 打折


建議方式
- 整理商業邏輯是必須的

1.0 只修bug, 不加新功能
2.0 做完一次上

### 重寫 vs 重構
重構 Refactor
- 最大目的是讓程式碼簡單易讀，過高維護性
- 關注點分離（找出本來這段邏輯在做的事情，不改變邏輯，只改掉用法）
- 移除重複的程式碼（php有工具）
- 奇怪用法改掉
重寫 
- 最大目的是減少程式的依賴性
- 替換程式邏輯，不會改變原有行為
- 奇怪用法改掉


重構 Refactor
目的：最大目的是讓程式碼簡單易讀，不改變商業邏輯
手段：
- 移除重複的程式碼
- decoupling ：把邏輯判斷放在正確的地方
- remove weird logic
- rewrite：throw away old code, and write new code

## Our Case
目的: 穩定性, 維護性
- step 1. clarify logic, output doc
    - doc: api, seq
- 

## todo
- 找工具檢查重複的程式碼