| The smells (along with the refactorings commonly used to fix them) from Martin Fowler's book Refactoring are listed in Table I-1, and the refactorings are listed in Table I-2. | INTERLUDE I1.1 | Tally. Put a tally mark by each refactoring for each time a smell references it. | | INTERLUDE I1.2 | Refactorings that Fix the Most Smells. Which refactorings fix the most smells? See Appendix A for solution. | | INTERLUDE I1.3 | Refactorings Not Mentioned. Which refactorings aren't mentioned by any of the smells? Why not? See Appendix A for solutions. | | INTERLUDE I1.4 | Other Smells. Does this list suggest any other smells you might want to be aware of? See Appendix A for solutions. | Table I.1. Smells and Their Associated Refactorings (from Fowler's Refactoring , back cover) | SMELL | COMMON REFACTORINGS | | Alternative Classes with Different Interfaces | Rename Method, Move Method | | Comments | Extract Method, Introduce Assertion | | Data Class | Move Method, Encapsulate Field, Encapsulate Collection | | Data Clump | Extract Class, Introduc 6 e Parameter Object, Preserve Whole Object | | Divergent Change | Extract Class | | Duplicated Code | Extract Method, Extract Class, Pull Up Method, Form Template Method | | Feature Envy | Move Method, Move Field, Extract Method | | Inappropriate Intimacy | Move Method, Move Field, Change Bidirectional Association to Unidirectional, Replace Inheritance with Delegation, Hide Delegate | | Incomplete Library Class | Introduce Foreign Method, Introduce Local Extension | | Large Class | Extract Class, Extract Subclass, Extract Interface, Replace Data Value with Object | | Lazy Class | Inline Class, Collapse Hierarchy | | Long Method | Extract Method, Replace Temp with Query, Replace Method with Method Object, Decompose Conditional | | Long Parameter List | Replace Parameter with Method, Introduce Parameter Object, Preserve Whole Object | | Message Chains | Hide Delegate | | Middle Man | Remove Middle Man, Inline Method, Replace Delegation with Inheritance | | Parallel Inheritance Hierarchies | Move Method, Move Field | | Primitive Obsession | Replace Data Value with Object, Extract Class, Introduce Parameter Object, Replace Array with Object, Replace Type Code with Class, Replace Type Code with Subclasses, Replace Type Code with State/Strategy | | Refused Bequest | Replace Inheritance with Delegation | | Shotgun Surgery | Move Method, Move Field, Inline Class | | Speculative Generality | Collapse Hierarchy, Inline Class, Remove Parameter, Rename Method | | Switch Statements | Replace Conditional with Polymorphism, Replace Type Code with Subclasses, Replace Type Code with State/Strategy, Replace Parameter with Explicit Methods, Introduce Null Object | | Temporary Field | Extract Class, Introduce Null Object | Table I.2. Refactorings (from Fowler, Refactoring , inside front cover) | Add Parameter | Pull Up Constructor Body | | Change Bidirectional Association to Unidirectional | Pull Up Field | | Change Reference to Value | Pull Up Method | | Change Unidirectional Association to Bidirectional | Push Down Field | | Change Value to Reference | Push Down Method | | Collapse Hierarchy | Remove Assignment to Parameters | | Consolidate Conditional Expression | Remove Control Flag | | Consolidate Duplicate Conditional Expression | Remove Middle Man | | Convert Procedural Design to Objects | Remove Parameter | | Decompose Conditional | Remove Setting Method | | Duplicate Observed Data | Rename Method | | Encapsulate Collection | Replace Array with Object | | Encapsulate Downcast | Replace Conditional with Polymorphism | | Encapsulate Field | Replace Constructor with Factory Method | | Extract Class | Replace Data Value with Object | | Extract Hierarchy | Replace Delegation with Inheritance | | Extract Interface | Replace Error Code with Exception | | Extract Method | Replace Exception with Test | | Extract Subclass | Replace Inheritance with Delegation | | Extract Superclass | Replace Magic Number with Symbolic Constant | | Form Template Method | Replace Method with Method Object | | Hide Delegate | Replace Nested Conditional with Guard Clause | | Hide Method | Replace Parameter with Explicit Methods | | Inline Class | Replace Parameter with Method | | Inline Method | Replace Record with Data Class | | Inline Temp | Replace Subclass with Fields | | Introduce Assertion | Replace Temp with Query | | Introduce Explaining Variable | Replace Type Code with Class | | Introduce Foreign Method | Replace Type Code with State/Strategy | | Introduce Local Extension | Replace Type Code with Subclasses | | Introduce Null Object | Self Encapsulate Field | | Introduce Parameter Object | Separate Domain from Presentation | | Move Field | Split Temporary Variable | | Move Method | Substitute Algorithm | | Parameterize Method | Tease Apart Inheritance | | Preserve Whole Object | | |