随时重构

发布: (2025年12月31日 GMT+8 22:00)
10 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的具体文本内容,我会将其翻译成简体中文并保留原始的格式、Markdown 语法以及技术术语。谢谢!

传统恐惧

在传统开发中,重构被视为风险:

  • “我们正处于功能开发中——不要动基础。”
  • “先把这个完成,然后再清理。”
  • “现在重构会导致一切不稳定。”

当重构成本高且容易出错时,这些担忧是有道理的。

有了 AI,重构成本大幅下降。问题从 “我们能负担得起重构吗?” 转变为 “我们的情境是否支持重构?”

基于上下文的再生成

AI 并不 修改 代码;它 从提供的上下文重新生成 代码。
当可以进行重构时,这一点会改变:

ConditionRefactoring Possible?
上下文清晰完整✅ 是
上下文碎片化或陈旧❌ 否 – 首先修复上下文
功能进行中,但上下文保持完整✅ 是
长时间中断且没有日志❌ 否 – 首先重建上下文

重构的可用性取决于上下文状态,而非项目阶段。

如果您已经维护了日志、保持了制品的一致性,并保留了决策历史——您可以在任何时候进行重构,即使在功能进行中。

AI 重构的产出

当你让 AI 在没有约束的情况下进行重构时,它会优化职责分离

人类期望AI 输出
合并重复代码按职责分离
减少文件数量增加文件数量
DRY(不要重复自己)在关注点之间建立清晰的边界

AI 重构往往会增加代码量。
这并不是错误——只是不同的优化目标。AI 更倾向于在职责清晰度上进行优化,而不是追求简洁。

DRY问题

当你明确请求进行 DRY 重构时,会出现一个新问题:作用域限制

AI 只能看到其上下文窗口内的内容。当代码库超出该窗口时:

  1. AI 只能看到部分重复代码。
  2. AI 在可见范围内提出合并方案。
  3. 合并可能与范围外的代码冲突。
  4. 结果:引用破损,抽象不完整。

规模依赖指令

代码库规模方法
(可放入上下文)“Refactor for DRY” 有效
指定要考虑的文件
将其拆分为明确的范围边界,逐步重构

对于大型代码库,您必须 显式管理范围

Refactor these 3 files for shared utilities:
- /src/handlers/userHandler.ts
- /src/handlers/orderHandler.ts
- /src/handlers/productHandler.ts

Do not modify files outside this set.

重构的真正目的

使用 AI 进行重构并非关于美学或最佳实践。

这关乎让代码保持 AI 可控。

随着代码规模的增长,AI 越来越难以:

  • 在上下文中保持完整的全局视图
  • 理解组件之间的关系
  • 在不产生意外影响的情况下进行修改

重构将代码重新组织为 AI 能够管理的单元:

重构前重构后
关注点混杂的大文件关注点明确的小文件
隐式依赖显式接口
责任交叉混乱责任分离
需要完整上下文才能理解每个单元可单独理解

当 AI 难以控制代码时进行重构。困难本身就是信号。

何时重构

传统时机:

  • 功能完成后
  • 在专门的“重构冲刺”期间
  • 当技术债务变得难以承受时

AI 时代时机:

  • 当上下文能够支持时(日志已维护,制品已对齐)
  • 当代码超出 AI 可舒适控制的范围时
  • 当你注意到 AI 因结构复杂性而出错时
  • 只要满足上述任意条件即可

不要等到“重构阶段”。如果上下文干净且代码变得难以管理,就立即重构。

重构循环

1. Notice AI struggling (repeated errors, confusion, partial understanding)
2. Check context state (are logs current? are artifacts aligned?)
3. If context is ready → refactor
4. If context is stale → rebuild context first
5. After refactor → update logs with the new structure

重构成为持续流程的一部分,而不是独立的活动。

重构揭示上下文问题

当你在带有人为意图的情况下进行重构时,要做好意外的准备。
结果往往不会完全符合你的预期——会有一些偏差:出现你未预料的结构、感觉奇怪的分离、以及出现在意想不到位置的边界。

这些意外并非 AI 的失误,而是上下文问题浮现。

这种不匹配揭示了:

  • 你默认但从未说明的前提
  • 只存在于你脑中的优先级顺序
  • 未被清晰传达的目标

机会

不要修复代码。修复上下文。

当重构产生意外结果时:

  1. 识别差距 – AI 生成的内容与您预期的有什么不同?
  2. 追溯到上下文 – 缺失的是哪项前提、优先级或目标?
  3. 重建上下文
    • 明确重新陈述前提(并指明顺序)
    • 澄清优先级的排列顺序
    • 定义目的及其相对重要性

随后使用已纠正的上下文再次进行重构。

Context Reconstruction Checklist

ElementQuestion
Premises我们基于哪些假设?顺序如何?
Priorities什么最重要?什么可以牺牲?
Purpose这段代码想要实现什么目标?
Constraints有哪些限制条件?

重构是上下文调试。意外的输出即为错误信息。

责任分离 vs. DRY

接受此权衡:

目标结果AI 兼容性
责任分离文件更多,边界更清晰高 – AI 处理良好
DRY 合并文件更少,共享抽象中 – 需要范围管理

如果你想要 DRY,你必须投入范围管理。如果让 AI 主导,你会得到分离。两者都没有错——只要了解你选择了哪一种。

摘要

传统AI 时代
在功能完成后或专门的冲刺期间进行重构。在上下文干净且 AI 对代码结构感到困难时进行重构。
决策受限于人力资源和风险规避。决策取决于上下文质量以及 AI 保持控制的能力。
DRY(不要重复自己)通常是主要目标。职责分离通常是主要目标;DRY 需要明确的作用域处理。
重构是一个单独的、计划好的活动。重构是一个持续的、由上下文驱动的循环。

保持上下文整洁,AI 将保持代码整洁。

# Refactor When Context Supports It

风险

  • 不稳定风险 – 仅在上下文陈旧时出现。

原则

  • 优化 DRY – 保持代码可复用且易维护。
  • 优化 AI 可控性 – 确保 AI 能可靠地管理代码库。

活动类型

  • Scheduled activity – 计划的重构会议。
  • Continuous capability – 随着代码演进的持续改进。

Refactoring is no longer a phase.
它是当代码超出 AI 控制时你可以使用的工具——这可能随时发生。

这是 “Beyond Prompt Engineering” 系列的一部分,探讨结构性和文化性方法如何在 AI 辅助开发中胜过提示优化。

Back to Blog

相关文章

阅读更多 »

RGB LED 支线任务 💡

markdown !Jennifer Davishttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%...

Mendex:我为何构建

介绍 大家好。今天我想分享一下我是谁、我在构建什么以及为什么。 早期职业生涯与倦怠 我在 17 年前开始我的 developer 生涯……