| | Copyright |
| | Preface |
| | | What Is Refactoring? |
| | | What Are the Goals of This Book? |
| | | Who Is This Book For? |
| | | What Background Do You Need? |
| | | How to Use This Book |
| | | Can I Contact the Author? |
| | | Acknowledgments |
|
| | Chapter 1. Roadmap |
| | | Overview |
| | | Section 1: Smells within Classes |
| | | Section 2: Smells between Classes |
| | | Section 3: Programs to Refactor |
| | | A Word on the Challenges |
|
| | Section 1. Smells Within Classes |
| | | Chapter 2. The Refactoring Cycle |
| | | What Is Refactoring? |
| | | Smells Are Problems |
| | | The Refactoring Cycle |
| | | When Are We Done? |
| | | Inside a Refactoring |
| | | Challenges |
| | | Conclusion |
|
| | | Chapter 3. Measured Smells |
| | | Smells Covered |
| | | Comments |
| | | Long Method |
| | | Large Class |
| | | Long Parameter List |
| | | More Challenges |
| | | Conclusion |
|
| | | Interlude 1. Smells and Refactorings |
| | | Chapter 4. Names |
| | | Smells Covered |
| | | Type Embedded in Name (Including Hungarian) |
| | | Uncommunicative Name |
| | | Inconsistent Names |
|
| | | Chapter 5. Unnecessary Complexity |
| | | Smells Covered |
| | | Dead Code |
| | | Speculative Generality |
|
| | | Interlude 2. Inverses |
| | | Chapter 6. Duplication |
| | | Smells Covered |
| | | Magic Number |
| | | Duplicated Code |
| | | Alternative Classes with Different Interfaces |
| | | Challenges |
|
| | | Chapter 7. Conditional Logic |
| | | Smells Covered |
| | | Null Check |
| | | Complicated Boolean Expression |
| | | Special Case |
| | | Simulated Inheritance (Switch Statement) |
|
| | | Interlude 3. Design Patterns |
|
| | Section 2. Smells Between Classes |
| | | Chapter 8. Data |
| | | Smells Covered |
| | | Primitive Obsession |
| | | Data Class |
| | | Data Clump |
| | | Temporary Field |
|
| | | Chapter 9. Inheritance |
| | | Smells Covered |
| | | Refused Bequest |
| | | Inappropriate Intimacy (Subclass Form) |
| | | Lazy Class |
|
| | | Chapter 10. Responsibility |
| | | Smells Covered |
| | | Feature Envy |
| | | Inappropriate Intimacy (General Form) |
| | | Message Chains |
| | | Middle Man |
| | | Challenges |
|
| | | Chapter 11. Accommodating Change |
| | | Smells Covered |
| | | Divergent Change |
| | | Shotgun Surgery |
| | | Parallel Inheritance Hierarchies |
| | | Combinatorial Explosion |
|
| | | Chapter 12. Library Classes |
| | | Smells Covered |
| | | Incomplete Library Class |
| | | Challenges |
|
| | | Interlude 4. Gen-A-Refactoring |
|
| | Section 3. Programs to Refactor |
| | | Chapter 13. A Database Example |
| | | Course.java (Online at www.xp123.com/rwb ) |
| | | Offering.java |
| | | Schedule.java |
| | | Report.java |
| | | TestSchedule.java |
| | | TestReport.java |
|
| | | Chapter 14. A Simple Game |
| | | Development Episodes |
|
| | | Chapter 15. Catalog |
| | | Introduction |
| | | Path 1: Catalog.itemsMatching(query) |
| | | Path 2: Query.matchesIn(catalog) |
| | | Path 3: Process(catalog.data, query.data) |
| | | Conclusion |
|
| | | Chapter 16. Planning Game Simulator |
| | | Part 1: Original Code |
| | | Part 2: Redistributing Features |
| | | Removing Duplication, Selection Troubles, and a Few Burrs |
| | | Part 3: Pushing the Code Further |
|
| | | Chapter 17. Where to Go from Here |
| | | Books |
| | | Admonitions |
| | | Exercises to Try |
| | | Web Sites |
|
|
| | Section 4. Appendixes |
| | | Appendix A. Answers to Selected Questions |
| | | Chapter 2. The Refactoring Cycle |
| | | Chapter 3. Measured Smells |
| | | Interlude 1. Smells and Refactorings |
| | | Chapter 4. Names |
| | | Chapter 5. Unnecessary Complexity |
| | | Chapter 6. Duplication |
| | | Chapter 7. Conditional Logic |
| | | Interlude 3. Design Patterns |
| | | Chapter 8. Data |
| | | Chapter 9. Inheritance |
| | | Chapter 10. Responsibility |
| | | Chapter 11. Accommodating Change |
| | | Chapter 12. Library Classes |
| | | Interlude 4. Gen-A-Refactoring |
| | | Chapter 13. A Database Example |
| | | Chapter 14. A Simple Game |
| | | Chapter 15. Catalog |
| | | Chapter 16. Planning Game |
|
| | | Appendix B. Java Refactoring Tools |
| | | Appendix C. Inverses for Refactorings |
| | | Appendix D. Key Refactorings |
| | | Change Bidirectional Association to Unidirectional |
| | | Duplicate Observed Data |
| | | Extract Class |
| | | Extract Method |
| | | Move Field |
| | | Move Method |
| | | Replace Type Code with State/Strategy |
|
|
| | Bibliography |