# 项目总结

在极限编程的实践中，测试驱动开发与重构总是如影随形。在我们看来，根本就不应该有“花大段时间重构”这样的事情发生。重构应该贯穿在整个开发过程中：**写 5 分钟代码，花上 20 秒重构，这才是敏捷软件开发应有的节奏**。

但是，我们总有遇上祖传代码的时候。它们缺乏测试、质量不佳、结构混乱。想在这样的代码基础上做任何事都会步履维艰。我们必须掌握进行较大规模重构的技能，才能有效应对祖传代码带来的挑战，才能真正把敏捷应用到最核心的系统。

在这个项目里，我们见识了镶金玫瑰商店的祖传代码。刚一接手，我们完全不知道应该拿这堆复杂的代码怎么办。但随着一步步重构进行，代码变得清晰易读，业务规则自然地从代码中浮现出来。

在这个过程中，我们做了下列练习：

* 用“录制/回放”的办法，为祖传代码搭建安全网；
* 跟随 IDEA 的提示对代码做最基本的清理；
* 提炼并重组代码中的大块逻辑，把行为放到适当的对象；
* 消除魔法字符串；
* 用工厂方法封装对象的创建过程；
* 建立继承体系；
* 用多态取代复杂的条件逻辑。

整个重构过程中，我们坚持了小步前进的原则：每次只做很小的修改，每次修改之后都运行所有测试，确保软件行为保持不变。这样做的结果是，**我们可以在任何一分钟暂停重构**，提交代码，去处理一些别的事情，回头再接着重构。祖传代码不会一夜之间被清理干净，我们要保持“日行一善”、持续改进的节奏，不能因为步子迈得太大把自己陷在泥潭中进退两难。

在重构过程中，IDE 的支持非常重要。像 Intellij IDEA 这样出色的 IDE，可以自动化很多重构步骤，从而大大降低重构出错的几率。作为程序员，我们也必须摸熟 IDE 提供的重构支持功能，才能在需要的时候能得心应手地使用。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://ethan-lin.gitbook.io/refactoring/xiang-jin-mei-gui/15-project-summary.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
