| | | 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 |