Now you can dramatically improve the design, performance, and manageability of object-oriented code without altering its interfaces or behavior. Refactoring shows you exactly how to spot the best opportunities for refactoring and exactly how to do it -- step by step. Through more than forty detailed case studies, you'll learn powerful -- and surprisingly simple -- ways to redesign code that is already in production. You'll learn scores of specific techniques, including when to move fields between classes, when to move code or down its hierarchy, and when to divide a single method into up two. Through intuition and trial and error, master programmers have spent years evolving these techniques; this book brings them all together into a comprehensive guide that any experienced developer can use.
The Starting Point.
The First Step in Refactoring.
Decomposing and Redistributing the Statement Method.
Replacing the Conditional Logic on Price Code with Polymorphism.
2. Principles in Refactoring.
Why Should You Refactor?
When Should You Refactor?
What Do I Tell My Manager?
Problems with Refactoring.
Refactoring and Design.
Refactoring and Performance.
Where Did Refactoring Come From?
3. Bad Smells in Code.
Long Parameter List.
Parallel Inheritance Hierarchies.
Alternative Classes with Different Interfaces.
Incomplete Library Class.
4. Building Tests.
The Value of Self-testing Code.
The JUnit Testing Framework.
Adding More Tests.
5. Toward a Catalog of Refactorings.
Format of the Refactorings.
How Mature Are These Refactorings?
6. Composing Methods.
Replace Temp with Query.
Introduce Explaining Variable.
Split Temporary Variable.
Remove Assignments to Parameters.
Replace Method with Method Object.
7. Moving Features Between Objects.
Remove Middle Man.
Introduce Foreign Method.
Introduce Local Extension.
8. Organizing Data.
Self Encapsulate Field.
Replace Data Value with Object.
Change Value to Reference.
Change Reference to Value.
Replace Array with Object.
Duplicate Observed Data.
Change Unidirectional Association to Bidirectional.
Change Bidirectional Association to Unidirectional.
Replace Magic Number with Symbolic Constant.
Replace Record with Data Class.
Replace Type Code with Class.
Replace Type Code with Subclasses.
Replace Type Code with State/Strategy.
Replace Subclass with Fields.
9. Simplifying Conditional Expressions.
Consolidate Conditional Expression.
Consolidate Duplicate Conditional Fragments.
Remove Control Flag.
Replace Nested Conditional with Guard Clauses.
Replace Conditional with Polymorphism.
Introduce Null Object.
10. Making Method Calls Simpler.
Separate Query from Modifier.
Replace Parameter with Explicit Methods.
Preserve Whole Object.
Replace Parameter with Method.
Introduce Parameter Object.
Remove Setting Method.
Replace Constructor with Factory Method.
Replace Error Code with Exception.
Replace Exception with Test.
11. Dealing with Generalization.
Pull Up Field.
Pull Up Method.
Pull Up Constructor Body.
Push Down Method.
Push Down Field.
Form Template Method.
Replace Inheritance with Delegation.
Replace Delegation with Inheritance.
12. Big Refactorings.
Tease Apart Inheritance.
Convert Procedural Design to Objects.
Separate Domain from Presentation.
13. Refactoring, Reuse, and Reality.
A Reality Check.
Why Are Developers Reluctant to Refactor Their Programs?
A Reality Check (Revisited).
Resources and References for Refactoring.
Implications Regarding Software Reuse and Technology Transfer.
A Final Note.
14. Refactoring Tools.
Refactoring with a Tool.
Technical Criteria for a Refactoring Tool.
Practical Criteria for a Refactoring Tool.
15. Putting It All Together.
List of Soundbites.
List of Refactorings.
Series: Addison-wesley Object Technology Series
Audience: Tertiary; University or College
Number Of Pages: 464
Published: 1st July 1999
Publisher: Pearson Education (US)
Country of Publication: US
Dimensions (cm): 24.3 x 18.7 x 2.9
Weight (kg): 0.93
Edition Number: 1