Saturday, December 4, 2010

Refactoring Improving the Design of Existing Code












Foreword........................................................................................................................ 6
Preface........................................................................................................................... 8
What Is Refactoring? ............................................................................................... 9
What's in This Book? ............................................................................................... 9
Who Should Read This Book? ............................................................................. 10
Building on the Foundations Laid by Others ...................................................... 10
Acknowledgments .................................................................................................. 11
Chapter 1. Refactoring, a First Example ................................................................ 13
The Starting Point................................................................................................... 13
The First Step in Refactoring ................................................................................ 17
Decomposing and Redistributing the Statement Method ................................ 18
Replacing the Conditional Logic on Price Code with Polymorphism ............. 35
Final Thoughts ........................................................................................................ 44
Chapter 2. Principles in Refactoring........................................................................ 46
Defining Refactoring .............................................................................................. 46
Why Should You Refactor? .................................................................................. 47
Refactoring Helps You Find Bugs ....................................................................... 48
When Should You Refactor?................................................................................ 49
What Do I Tell My Manager?................................................................................ 52
Problems with Refactoring .................................................................................... 54
Refactoring and Design......................................................................................... 57
Refactoring and Performance .............................................................................. 59
Where Did Refactoring Come From?.................................................................. 60
Chapter 3. Bad Smells in Code................................................................................ 63
Duplicated Code ..................................................................................................... 63
Long Method ........................................................................................................... 64
Large Class ............................................................................................................. 65
Long Parameter List............................................................................................... 65
Divergent Change .................................................................................................. 66
Shotgun Surgery..................................................................................................... 66
Feature Envy........................................................................................................... 66
Data Clumps ........................................................................................................... 67
Primitive Obsession ............................................................................................... 67
Switch Statements ................................................................................................. 68
Parallel Inheritance Hierarchies........................................................................... 68
Lazy Class ............................................................................................................... 68
Speculative Generality........................................................................................... 68
Temporary Field ..................................................................................................... 69
Message Chains ..................................................................................................... 69
Middle Man.............................................................................................................. 69
Inappropriate Intimacy........................................................................................... 70
Alternative Classes with Different Interfaces ..................................................... 70
Incomplete Library Class....................................................................................... 70
Data Class ............................................................................................................... 70
Refused Bequest.................................................................................................... 71
Comments ............................................................................................................... 71
Chapter 4. Building Tests.......................................................................................... 73
The Value of Self-testing Code ............................................................................ 73
The JUnit Testing Framework .............................................................................. 74
Adding More Tests ................................................................................................. 80
Chapter 5. Toward a Catalog of Refactorings ....................................................... 85
Format of the Refactorings ................................................................................... 85
Finding References................................................................................................ 86
How Mature Are These Refactorings?................................................................ 87
Chapter 6. Composing Methods .............................................................................. 89
Extract Method........................................................................................................ 89
Inline Method........................................................................................................... 95
Inline Temp.............................................................................................................. 96
Replace Temp with Query .................................................................................... 97
Introduce Explaining Variable............................................................................. 101
Split Temporary Variable..................................................................................... 104
Remove Assignments to Parameters ............................................................... 107
Replace Method with Method Object ................................................................ 110
Substitute Algorithm ............................................................................................. 113
Chapter 7. Moving Features Between Objects.................................................... 115
Move Method ........................................................................................................ 115
Move Field ............................................................................................................. 119
Extract Class ......................................................................................................... 122
Inline Class............................................................................................................ 125
Hide Delegate ....................................................................................................... 127
Remove Middle Man............................................................................................ 130
Introduce Foreign Method................................................................................... 131
Introduce Local Extension................................................................................... 133
Chapter 8. Organizing Data .................................................................................... 138
Self Encapsulate Field......................................................................................... 138
Replace Data Value with Object ........................................................................ 141
Change Value to Reference ............................................................................... 144
Change Reference to Value ............................................................................... 148
Replace Array with Object .................................................................................. 150
Duplicate Observed Data .................................................................................... 153
Change Unidirectional Association to Bidirectional ........................................ 159
Change Bidirectional Association to Unidirectional ........................................ 162
Replace Magic Number with Symbolic Constant ............................................ 166
Encapsulate Field................................................................................................. 167
Encapsulate Collection........................................................................................ 168
Replace Record with Data Class....................................................................... 175
Replace Type Code with Class.......................................................................... 176
Replace Type Code with Subclasses ............................................................... 181
Replace Type Code with State/Strategy........................................................... 184
Replace Subclass with Fields............................................................................. 188
Chapter 9. Simplifying Conditional Expressions ................................................. 192
Decompose Conditional ...................................................................................... 192
Consolidate Conditional Expression ................................................................. 194
Consolidate Duplicate Conditional Fragments ................................................ 196
Remove Control Flag........................................................................................... 197
Replace Nested Conditional with Guard Clauses ........................................... 201
Replace Conditional with Polymorphism .......................................................... 205
Introduce Null Object ........................................................................................... 209
Introduce Assertion .............................................................................................. 216
Chapter 10. Making Method Calls Simpler........................................................... 220
Rename Method ................................................................................................... 221
Add Parameter...................................................................................................... 222
Remove Parameter.............................................................................................. 223
Separate Query from Modifier............................................................................ 225
Parameterize Method .......................................................................................... 228
Replace Parameter with Explicit Methods........................................................ 230
Preserve Whole Object ....................................................................................... 232
Replace Parameter with Method ....................................................................... 235
Introduce Parameter Object ............................................................................... 238
Remove Setting Method...................................................................................... 242
Hide Method.......................................................................................................... 245
Replace Constructor with Factory Method ....................................................... 246
Encapsulate Downcast........................................................................................ 249
Replace Error Code with Exception .................................................................. 251
Replace Exception with Test .............................................................................. 255
Chapter 11. Dealing with Generalization.............................................................. 259
Pull Up Field .......................................................................................................... 259
Pull Up Method ..................................................................................................... 260
Pull Up Constructor Body.................................................................................... 263
Push Down Method.............................................................................................. 266
Push Down Field .................................................................................................. 266
Extract Subclass................................................................................................... 267
Extract Superclass ............................................................................................... 272
Extract Interface ................................................................................................... 277
Collapse Hierarchy............................................................................................... 279
Form Template Method....................................................................................... 280
Replace Inheritance with Delegation................................................................. 287
Replace Delegation with Inheritance................................................................. 289
Chapter 12. Big Refactorings ................................................................................. 293
Tease Apart Inheritance...................................................................................... 294
Convert Procedural Design to Objects ............................................................. 300
Separate Domain from Presentation................................................................. 302
Extract Hierarchy.................................................................................................. 306
Chapter 13. Refactoring, Reuse, and Reality...................................................... 311
A Reality Check .................................................................................................... 311
Why Are Developers Reluctant to Refactor Their Programs? ...................... 312
A Reality Check (Revisited)................................................................................ 323
Resources and References for Refactoring..................................................... 323
Implications Regarding Software Reuse and Technology Transfer............. 324
A Final Note........................................................................................................... 325
Endnotes................................................................................................................ 325
Chapter 14. Refactoring Tools ............................................................................... 328
Refactoring with a Tool........................................................................................ 328
Technical Criteria for a Refactoring Tool.......................................................... 329
Practical Criteria for a Refactoring Tool............................................................ 331
Wrap Up ................................................................................................................. 332
Chapter 15. Putting It All Together ........................................................................ 333
Bibliography........................................................................................................... 336
References ................................................................................................................ 336

Download
Another Software Engineering Books

No comments:

Post a Comment

Related Posts with Thumbnails

Put Your Ads Here!