---
title: 改进与重构代码
description: 使用 Verdent 进行代码改进与重构的最佳实践
---

Verdent for VS Code 帮助你在多个文件之间安全地重构和改进代码，同时保留原有功能。借助 Plan Mode 与 Explorer 子智能体，你可以在做出改动前识别出所有受影响的文件，确保全面重构而不遗漏任何实例。

### 你将学到

- 提出聚焦于结果而非实现的有效重构请求
- 在多个文件之间安全重构并管理依赖关系
- 请求代码质量改进与优化建议
- 用多阶段方法处理大规模重构项目
- 通过算法与架构改进来优化性能
- 在重构过程中保留代码功能

### 前置条件

在使用 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：初步分析

在 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：阶段规划

Verdent 创建多阶段计划供审阅：

**示例计划：**
- **阶段 1**：添加 OAuth 库并配置端点
- **阶段 2**：更新用户模型和数据库模式
- **阶段 3**：迁移现有认证逻辑
- **阶段 4**：移除已弃用的认证代码
- **阶段 5**：更新测试和文档

每个阶段包括：
- 将被修改的文件
- 预估复杂度
- 对前序阶段的依赖
- 风险评估

#### 阶段 3：逐阶段执行

一次执行一个阶段，并在阶段之间进行测试：

1. 在 Plan Mode 中批准阶段 1
2. 切换到 Agent Mode 并执行
3. 彻底测试以验证阶段 1 正常工作
4. 返回 Plan Mode 进行阶段 2
5. 重复直到所有阶段完成

#### 阶段 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 查询、缺失索引、低效连接
    - **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 将：
- 分析当前实现和边界情况
- 提出重构后的结构
- 解释为何重构后的版本是等价的
- 建议测试用例以验证等价性

**当功能可能改变时：**

在某些情况下，重构会有意改变行为（修复 bug、改进验证）。请明确说明这一点：

```
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>
