- Introduction - [[Welcome]] - [[What you need to know]] - Introduction to Refactoring - [[What refactoring is]] - [[What refactoring is not]] - [[Why to use refactoring]] - [[When to use refactoring]] - [[Code smells]] - [[Origin of these ideas]] - Getting Started - Method-Level Refactoring - [[Preparing to refactor]] - [[Grouping refactorings together]] - [[Using the Extract Method refactoring]] - [[Extract Method with parameters and variables]] - [[Common code smells for Extract Method]] - [[Using IDEs for the Extract Method refactoring]] - [[The Inline Method refactoring]] - [[Refactorings that remove temps]] - [[Refactorings that add temps]] - Class- and Condition-Focused Refactoring - [[Move Method]] - [[Extract Class and Inline Class]] - [[Making conditions easier to read]] - [[Replacing conditions with polymorphism]] - [[Replacing type code with subclasses]] - Data-Focused Refactoring - [[Moving and encapsulating fields]] - [[Working with data clumps]] - [[Simplifying method calls and parameter use]] - [[Pulling and pushing methods and fields]] - Communication and High-Level Refactoring - [[Refining hierarchies]] - [[Communication refactorings]] - [[Larger scale refactoring]] - Conclusion - [[Next steps]]