# 改善與重構程式碼 (/zh-Hant/docs/verdent-for-vscode/task-based-guides/refactoring)

> 使用 Verdent 進行程式碼改善與重構的最佳實踐



Verdent for VS Code 協助你在多個檔案間安全地重構與改善程式碼，同時保留原有功能。透過搭配 Explorer 子代理的 Plan Mode，你可以在進行任何變更前找出所有受影響的檔案，確保重構全面而不遺漏任何實例。

### 你將學到什麼 [#你將學到什麼]

* 提出聚焦於成果而非實作方式的有效重構請求
* 透過依賴管理在多個檔案間安全重構
* 請求程式碼品質改善與最佳化建議
* 以多階段方式處理大規模重構專案
* 透過演算法與架構改善來最佳化效能
* 在重構操作期間保留程式碼功能

### 先決條件 [#先決條件]

在使用 Verdent 重構前：

* 已安裝 Verdent 擴充功能的 Visual Studio Code
* 在 VS Code 中開啟一個程式碼庫或專案工作區
* 有可用點數的有效 Verdent 訂閱方案
* 建議使用版本控制（Git），以便在需要時安全回復

***

## 提出有效的重構請求 [#提出有效的重構請求]

描述**你想改善什麼以及為什麼**，而非**該如何修正**。讓 Verdent 分析程式碼，並根據你的專案模式提出最佳方案。

**有效的重構請求：**

聚焦於你想要的成果，而非實作方式：

```
Refactor the UserController to improve readability and reduce duplication
```

```
This authentication logic is scattered across multiple files. Consolidate it into a single module
```

```
Improve error handling in the API layer to be more consistent and informative
```

Verdent 會分析程式碼、找出所有受影響的檔案、檢視模式，並提出符合你程式碼庫慣例的具體重構策略。

**最佳實踐：使用 Plan Mode**

在 Plan Mode 中開始重構請求。Verdent 將會：

1. 分析程式碼並找出所有受影響的檔案
2. 在進行任何變更前提出詳細的重構計畫
3. 針對實作偏好詢問釐清問題
4. 確切顯示將變更什麼以及變更順序
5. 讓你檢視並調整方案

**Plan Mode 範例：**

```
In Plan Mode: Refactor authentication logic to use a centralized authentication utility
```

Verdent 將會：

* 使用 Explorer 找出所有驗證程式碼的位置
* 識別模式與不一致之處
* 提出統一的驗證介面
* 顯示哪些檔案會被修改
* 解釋重構順序

你可以請求 Verdent 將計畫儲存到 `plan.md` 檔案，以便在執行前進行額外檢視與團隊討論。

**使用 Explorer 進行全面搜尋：**

對於複雜的重構，明確要求 Verdent 使用 Explorer 代理進行徹底搜尋：

```
Use the Explorer agent to find all places where we manually validate email addresses, then refactor them to use a centralized validation utility
```

這能確保 Verdent 找出每一個需要更新的位置，避免在程式碼庫中產生不一致的重構。

<Tip>
  Plan Mode 對重構至關重要。它在執行前確切顯示將變更什麼，避免意外，並讓你能根據架構考量調整方案。
</Tip>

***

## 多檔案重構 [#多檔案重構]

Verdent 在多個檔案間進行重構，同時維護匯入、依賴關係與跨檔案引用。它會找出所有受影響的檔案、以正確順序更新它們，並確保整個程式碼庫的一致性。

**多檔案重構的運作方式：**

1. **探索階段**：Verdent（使用 Explorer）找出所有需要變更的檔案
2. **依賴分析**：識別檔案之間的依賴關係以決定更新順序
3. **計畫建立**：顯示所有將被修改的檔案以及變更順序
4. **依序更新**：依依賴順序修改檔案（例如：在使用型別的元件之前先修改型別）
5. **匯入管理**：自動更新匯入、匯出與跨檔案引用
6. **驗證**：檢查變更在所有檔案間是否一致

<Note>
  多檔案重構透過自動化依賴追蹤來保留功能，Verdent 會以原子方式更新所有受影響的檔案。
</Note>

**範例：**

```
Rename the User interface to UserProfile across the entire project
```

Verdent 將會：

* 找出所有匯入或使用 `User` 的檔案
* 識別型別定義、實作與使用之處
* 先更新型別定義，再更新實作，最後更新使用之處
* 調整所有匯入陳述式
* 確保整個程式碼庫的一致性

**使用 Plan Mode 檢視範圍：**

在執行多檔案重構前，於 Plan Mode 中檢視完整範圍：

```
In Plan Mode: Extract the authentication logic from UserController into a separate AuthService
```

Verdent 將會顯示：

* 將建立哪些檔案（新的 AuthService）
* 將修改哪些檔案（UserController 與所有匯入者）
* 哪些程式碼會從 UserController 移到 AuthService
* 匯入與依賴關係將如何更新

這能避免意外的範圍蔓延，並確保你在繼續前理解完整的影響。

***

## 請求程式碼品質改善 [#請求程式碼品質改善]

Verdent 不會在未被要求的情況下主動建議改善。不過，你可以隨時請求程式碼品質審查與改善建議。

<Tabs>
  <Tab title="一般審查">
    請求廣泛的程式碼品質審查：

    ```
    Review this code for potential improvements
    ```

    ```
    Suggest ways to improve code quality in the UserService module
    ```

    ```
    Are there any performance optimizations we could make here?
    ```

    ```
    Analyze the PaymentController for maintainability issues
    ```

    Verdent 會分析程式碼並針對以下面向提供具體建議：

    * **可讀性**：變數命名、函式拆解、註解清晰度
    * **效能**：演算法複雜度、冗餘操作、快取機會
    * **可維護性**：程式碼重複、耦合、關注點分離
    * **最佳實踐**：設計模式、錯誤處理、測試覆蓋率
    * **安全性**：輸入驗證、驗證檢查、資料外洩
  </Tab>

  <Tab title="聚焦審查">
    若需針對性的回饋，可引用特定檔案：

    ```
    @services/UserService.js Review this module for dependency injection improvements
    ```

    ```
    @controllers/PaymentController.js Identify opportunities to reduce complexity
    ```

    Verdent 會在你專案模式的脈絡下檢視指定的程式碼，並提供可行的建議。
  </Tab>
</Tabs>

***

## 大規模重構專案 [#大規模重構專案]

對於大規模重構，請使用 Plan Mode 搭配**多階段方法**以獲得最可靠的結果。Verdent 會將重構拆解為可管理的階段，讓你在繼續前檢視並核准每個階段。

**多階段重構工作流程：**

#### 階段 1：初步分析 [#階段-1初步分析]

使用 Plan Mode 搭配 Explorer 代理，找出所有受影響的檔案與依賴關係：

```
In Plan Mode: Use Explorer to analyze our codebase and create a plan to replace our custom authentication with OAuth 2.0
```

Verdent 會執行全面分析：

* 識別所有與驗證相關的程式碼
* 對應依賴關係與整合點
* 評估複雜度與風險區域
* 提出階段拆解方案

#### 階段 2：階段規劃 [#階段-2階段規劃]

Verdent 建立多階段計畫供檢視：

**範例計畫：**

* **階段 1**：加入 OAuth 函式庫並設定端點
* **階段 2**：更新使用者模型與資料庫結構
* **階段 3**：遷移現有的驗證邏輯
* **階段 4**：移除已棄用的驗證程式碼
* **階段 5**：更新測試與文件

每個階段包含：

* 將被修改的檔案
* 預估複雜度
* 對前一階段的依賴
* 風險評估

#### 階段 3：逐階段執行 [#階段-3逐階段執行]

一次執行一個階段，並在階段之間進行測試：

1. 在 Plan Mode 核准階段 1
2. 切換到 Agent Mode 並執行
3. 徹底測試以驗證階段 1 運作正常
4. 回到 Plan Mode 處理階段 2
5. 重複直到所有階段完成

#### 階段 4：迭代調整 [#階段-4迭代調整]

在每個階段後檢視結果。若出現問題：

* 調整剩餘階段的計畫
* 視需要加入修正階段
* 根據發現調整方案

這種分階段方法確保安全性，並在大型重構專案出現問題時允許修正方向。

<Note>
  大規模重構應始終搭配版本控制進行。在每個階段後提交，這樣若出現問題即可回復而不會失去所有進度。
</Note>

***

## 效能最佳化 [#效能最佳化]

Verdent 會分析程式碼以找出效能瓶頸，並建議最佳化方式，包括改善演算法複雜度、使用高效的資料結構，以及降低資源使用。

<Tabs>
  <Tab title="演算法最佳化">
    改善演算法複雜度：

    ```
    Analyze the performance of this data processing function and suggest improvements
    ```

    ```
    Can we improve the time complexity of this search algorithm?
    ```

    **Verdent 會識別什麼：**

    * **演算法複雜度**：O(n²) 迴圈、巢狀迭代、低效搜尋
    * **冗餘計算**：重複計算、不必要的操作
    * **記憶體問題**：記憶體洩漏、過度配置、大型物件保留

    **範例：**

    ```
    Optimize the searchProducts function that's currently O(n²)
    ```

    Verdent 會分析函式、找出低效之處（巢狀迴圈或重複的線性搜尋），並提出具體改善：

    * 以雜湊表取代巢狀迴圈，實現 O(n) 查找
    * 排序後使用二分搜尋，達到 O(log n) 複雜度
    * 快取計算結果以避免冗餘計算
    * 對昂貴操作實作記憶化

    回應包含：

    * **當前複雜度**：說明為何目前程式碼較慢
    * **建議方案**：具體的演算法或資料結構變更
    * **效能提升**：預估改善幅度（例如 O(n²) → O(n log n)）
    * **取捨**：記憶體使用、程式碼複雜度、可維護性等考量
  </Tab>

  <Tab title="元件最佳化">
    最佳化 UI 元件與渲染：

    ```
    Optimize this component to reduce unnecessary re-renders
    ```

    **Verdent 會識別什麼：**

    * **前端效能**：不必要的重新渲染、過大的套件體積、阻塞操作
    * **元件生命週期**：低效的 useEffect 依賴、缺少記憶化
    * **狀態管理**：冗餘的狀態更新、prop drilling

    Verdent 會分析你的元件並建議最佳化方式，例如 React.memo、useMemo、useCallback 或元件拆分。
  </Tab>

  <Tab title="API 與資料庫最佳化">
    找出並修正 API 與資料庫瓶頸：

    ```
    Identify performance bottlenecks in the API request handler
    ```

    **Verdent 會識別什麼：**

    * **資料庫效能**：N+1 查詢、缺少索引、低效的 join
    * **API 效能**：緩慢的端點、低效的資料抓取、缺少快取

    Verdent 會檢視查詢模式，建議資料庫索引、快取策略與 API 最佳化技巧。
  </Tab>
</Tabs>

<Tip>
  進行效能最佳化時，請提供典型資料量與效能限制的脈絡。這能協助 Verdent 提出適合你規模的方案（例如 100 筆 vs 100 萬筆）。
</Tip>

<Tip>
  最佳化前先進行剖析，測量效能影響以確保最佳化帶來有意義的改善。
</Tip>

***

## 重構期間保留功能 [#重構期間保留功能]

Verdent 致力於在重構期間保留程式碼功能，維持相同的輸入、輸出與行為，同時改善內部實作。

**Verdent 如何保留功能：**

* **輸入/輸出分析**：識別函式簽章、API 契約與預期行為
* **測試感知**：將現有測試視為行為規格
* **保守變更**：以最少的變更達成重構目標
* **驗證**：可產生或執行測試以驗證功能是否被保留

**安全重構的最佳實踐：**

1. **務必測試重構後的程式碼** - 即使有 Verdent 的分析，手動或自動化測試仍能驗證功能是否被保留，對複雜重構尤其重要

2. **使用版本控制** - 在重構前提交，以便在出現問題時回復

3. **漸進式重構** - 將大型重構拆解為較小的步驟，並在每次變更後測試

4. **仔細檢視變更** - 檢視 diff 以理解變更了什麼以及原因

5. **複雜重構使用 Plan Mode** - 在執行前檢視方案以發現潛在問題

**範例：安全重構請求**

```
Refactor the calculateOrderTotal function to use a more maintainable structure, but ensure it produces identical results for all input cases
```

Verdent 將會：

* 分析當前實作與邊界情況
* 提出重構後的結構
* 解釋為何重構後的版本是等效的
* 建議測試案例以驗證等效性

**何時功能可能會改變：**

在某些情況下，重構會刻意改變行為（修正錯誤、改善驗證）。請明確說明這一點：

```
Refactor the email validation function to correctly handle international domains, which the current implementation doesn't support
```

這代表行為變更是預期且刻意的。

***

## 最佳實踐 [#最佳實踐]

<Accordion title="描述問題，而非解法">
  讓 Verdent 分析程式碼並提出最佳重構方案，而非規定具體變更。
</Accordion>

<Accordion title="重構時務必使用 Plan Mode">
  在執行前檢視完整計畫。這能避免意外，並讓你能根據架構考量調整方案。
</Accordion>

<Accordion title="明確使用 Explorer 進行全面搜尋">
  若要徹底重構，請要求 Verdent 使用 Explorer 找出所有實例：「使用 Explorer 找出所有手動錯誤處理，然後重構為使用我們的錯誤工具。」
</Accordion>

<Accordion title="將大型重構拆解為階段">
  搭配階段間測試的多階段方法，比一次性完成所有事項更安全且更易管理。
</Accordion>

<Accordion title="在階段之間進行測試">
  在繼續下一階段前驗證每個階段運作正常。這能隔離問題並避免問題累積。
</Accordion>

<Accordion title="頻繁提交">
  使用版本控制在每個階段或重大變更後建立檢查點。這能在不失去所有進度的情況下安全回復。
</Accordion>

<Accordion title="儲存計畫供團隊檢視">
  對於重大重構，請求 Verdent 將計畫儲存到 `plan.md`，以便在執行前進行團隊討論。
</Accordion>

<Accordion title="為最佳化提供脈絡">
  請求效能改善時，請納入資料量、效能限制與可接受取捨的相關資訊。
</Accordion>

***

## 另請參閱 [#另請參閱]

<CardGroup cols="2">
  <Card title="測試與除錯" icon="bug" href="/docs/verdent-for-vscode/task-based-guides/testing-debugging">
    產生測試以驗證重構後的程式碼是否正確運作
  </Card>

  <Card title="理解程式碼" icon="book" href="/docs/verdent-for-vscode/task-based-guides/understanding-code">
    在重構前分析程式碼結構以理解影響
  </Card>
</CardGroup>
