改进与重构代码
使用 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 duplicationThis authentication logic is scattered across multiple files. Consolidate it into a single moduleImprove error handling in the API layer to be more consistent and informativeVerdent 会分析代码、识别所有受影响的文件、检查模式,并提出符合你代码库约定的具体重构策略。
最佳实践:使用 Plan Mode
在 Plan Mode 中开始重构请求。Verdent 将:
- 分析代码并识别所有受影响的文件
- 在做出改动前呈现详细的重构计划
- 就实现偏好提出澄清问题
- 准确展示将改动哪些内容、以及改动顺序
- 允许你审阅并优化方案
Plan Mode 示例:
In Plan Mode: Refactor authentication logic to use a centralized authentication utilityVerdent 将:
- 使用 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 发现每一处需要更新的位置,防止代码库中出现不一致的重构。
Plan Mode 对于重构至关重要。它通过在执行前准确展示将改动的内容来避免意外,并允许你基于架构考量优化方案。
多文件重构
Verdent 在多个文件之间重构,同时维护导入、依赖关系和跨文件引用。它会识别所有受影响的文件,按正确顺序更新它们,并确保整个代码库的一致性。
多文件重构的工作方式:
- 发现阶段:Verdent(使用 Explorer)找到所有需要改动的文件
- 依赖分析:识别文件之间的依赖关系以确定更新顺序
- 创建计划:展示所有将被修改的文件以及改动顺序
- 顺序更新:按依赖顺序修改文件(例如,先更新类型,再更新使用它们的组件)
- 导入管理:自动更新导入、导出和跨文件引用
- 验证:检查改动在所有文件中是否一致
多文件重构通过自动化的依赖追踪来保留功能,Verdent 会以原子方式更新所有受影响的文件。
示例:
Rename the User interface to UserProfile across the entire projectVerdent 将:
- 找到所有导入或使用
User的文件 - 识别类型定义、实现和使用处
- 先更新类型定义,再更新实现,最后更新使用处
- 调整所有导入语句
- 确保整个代码库的一致性
使用 Plan Mode 审阅范围:
在执行多文件重构之前,在 Plan Mode 中审阅完整范围:
In Plan Mode: Extract the authentication logic from UserController into a separate AuthServiceVerdent 将展示:
- 将创建哪些文件(新的 AuthService)
- 将修改哪些文件(UserController 及所有导入方)
- 哪些代码将从 UserController 移动到 AuthService
- 导入和依赖关系将如何更新
这能防止意外的范围扩大,并确保你在继续之前理解全部影响。
请求代码质量改进
Verdent 不会在未被询问时主动提出改进建议。不过,你可以随时请求代码质量审查和改进建议。
请求广泛的代码质量审查:
Review this code for potential improvementsSuggest ways to improve code quality in the UserService moduleAre there any performance optimizations we could make here?Analyze the PaymentController for maintainability issuesVerdent 分析代码并针对以下方面提供具体建议:
- 可读性:变量命名、函数拆解、注释清晰度
- 性能:算法复杂度、冗余操作、缓存机会
- 可维护性:代码重复、耦合、关注点分离
- 最佳实践:设计模式、错误处理、测试覆盖率
- 安全性:输入验证、认证检查、数据暴露
若需针对性反馈,请引用特定文件:
@services/UserService.js Review this module for dependency injection improvements@controllers/PaymentController.js Identify opportunities to reduce complexityVerdent 会结合你的项目模式审查指定代码,并提供可执行的建议。
大规模重构项目
对于大规模重构,使用 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.0Verdent 执行全面分析:
- 识别所有与认证相关的代码
- 映射依赖关系和集成点
- 评估复杂度与风险区域
- 提出阶段划分
阶段 2:阶段规划
Verdent 创建多阶段计划供审阅:
示例计划:
- 阶段 1:添加 OAuth 库并配置端点
- 阶段 2:更新用户模型和数据库模式
- 阶段 3:迁移现有认证逻辑
- 阶段 4:移除已弃用的认证代码
- 阶段 5:更新测试和文档
每个阶段包括:
- 将被修改的文件
- 预估复杂度
- 对前序阶段的依赖
- 风险评估
阶段 3:逐阶段执行
一次执行一个阶段,并在阶段之间进行测试:
- 在 Plan Mode 中批准阶段 1
- 切换到 Agent Mode 并执行
- 彻底测试以验证阶段 1 正常工作
- 返回 Plan Mode 进行阶段 2
- 重复直到所有阶段完成
阶段 4:迭代优化
每个阶段后审阅结果。若出现问题:
- 调整剩余阶段的计划
- 必要时增加纠正阶段
- 基于发现优化方案
这种分阶段方法确保安全性,并允许在大型重构项目过程中出现问题时进行修正。
大规模重构应始终配合版本控制进行。在每个阶段后提交,以便在出现问题时可以回滚而不丢失全部进度。
性能优化
Verdent 分析代码中的性能瓶颈,并提出优化建议,包括算法复杂度改进、高效数据结构和资源使用减少。
改进算法复杂度:
Analyze the performance of this data processing function and suggest improvementsCan 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))
- 权衡取舍:内存使用、代码复杂度、可维护性考量
优化 UI 组件和渲染:
Optimize this component to reduce unnecessary re-rendersVerdent 会识别什么:
- 前端性能:不必要的重新渲染、过大的包体积、阻塞操作
- 组件生命周期:低效的 useEffect 依赖、缺失的记忆化
- 状态管理:冗余的状态更新、prop drilling
Verdent 分析你的组件并建议优化方案,如 React.memo、useMemo、useCallback 或组件拆分。
识别并修复 API 和数据库瓶颈:
Identify performance bottlenecks in the API request handlerVerdent 会识别什么:
- 数据库性能:N+1 查询、缺失索引、低效连接
- API 性能:慢端点、低效数据获取、缺失缓存
Verdent 检查查询模式,建议数据库索引、缓存策略和 API 优化技术。
进行性能优化时,请提供关于典型数据规模和性能约束的上下文。这有助于 Verdent 提出适合你规模的方案(例如 100 项 vs 100 万项)。
优化前先进行性能剖析,测量性能影响以确保优化带来有意义的改进。
在重构过程中保留功能
Verdent 致力于在重构过程中保留代码功能,在改进内部实现的同时维持相同的输入、输出和行为。
Verdent 如何保留功能:
- 输入/输出分析:识别函数签名、API 契约和预期行为
- 测试感知:将现有测试视为行为规范
- 保守变更:做出最小改动以实现重构目标
- 验证:可生成或运行测试以验证功能得以保留
安全重构的最佳实践:
-
始终测试重构后的代码 —— 即使有 Verdent 的分析,手动或自动测试也能验证功能得以保留,尤其对于复杂重构
-
使用版本控制 —— 重构前提交,以便在出现问题时回滚
-
增量重构 —— 将大型重构拆分为更小的步骤,每次改动后进行测试
-
仔细审阅改动 —— 检查 diff 以理解改动了什么以及为什么
-
对复杂重构使用 Plan Mode —— 在执行前审阅方案以发现潜在问题
示例:安全重构请求
Refactor the calculateOrderTotal function to use a more maintainable structure, but ensure it produces identical results for all input casesVerdent 将:
- 分析当前实现和边界情况
- 提出重构后的结构
- 解释为何重构后的版本是等价的
- 建议测试用例以验证等价性
当功能可能改变时:
在某些情况下,重构会有意改变行为(修复 bug、改进验证)。请明确说明这一点:
Refactor the email validation function to correctly handle international domains, which the current implementation doesn't support这表明行为变更是预期且有意为之的。
最佳实践
描述问题,而非方案
让 Verdent 分析代码并提出最佳重构方案,而不是规定具体改动。
重构时始终使用 Plan Mode
在执行前审阅完整计划。这能避免意外,并允许你基于架构考量优化方案。
明确使用 Explorer 进行全面搜索
为彻底重构,要求 Verdent 使用 Explorer 找到所有实例:"使用 Explorer 找到所有手动错误处理,然后重构为使用我们的错误工具。"
将大型重构拆分为多个阶段
在阶段之间进行测试的多阶段方法,比一次性完成所有内容更安全、更易管理。
在阶段之间进行测试
在继续下一阶段之前验证每个阶段正常工作。这能隔离问题并防止问题累积。
频繁提交
使用版本控制在每个阶段或重大改动后创建检查点。这样可以安全回滚而不丢失全部进度。
保存计划供团队审阅
对于重要的重构,请求 Verdent 将计划保存到 plan.md,以便在执行前进行团队讨论。
为优化提供上下文
请求性能改进时,包含关于数据规模、性能约束和可接受权衡的信息。