Refactoring: Improving the Design of Existing Code
Softwarequalität

Refactoring: Improving the Design of Existing Code

Martin Fowler, 2018

Inhaltsverzeichnis des Buches

  • Cover Page
  • About This E-Book
  • Front End Paper
  • Title Page
  • Copyright Page
  • Dedication Page
  • Contents
  • Foreword to the First Edition
  • Preface
  • What Is Refactoring?
  • What’s in This Book?
  • Who Should Read This Book?
  • Building on a Foundation Laid by Others
  • Acknowledgments
  • Chapter 1 Refactoring: A First Example
  • The Starting Point
  • Comments on the Starting Program
  • The First Step in Refactoring
  • Decomposing the statement Function
  • Status: Lots of Nested Functions
  • Splitting the Phases of Calculation and Formatting
  • Status: Separated into Two Files (and Phases)
  • Reorganizing the Calculations by Type
  • Status: Creating the Data with the Polymorphic Calculator
  • Final Thoughts
  • Chapter 2 Principles in Refactoring
  • Defining Refactoring
  • The Two Hats
  • Why Should We Refactor?
  • When Should We Refactor?
  • Problems with Refactoring
  • Refactoring, Architecture, and Yagni
  • Refactoring and the Wider Software Development Process
  • Refactoring and Performance
  • Where Did Refactoring Come From?
  • Automated Refactorings
  • Going Further
  • Chapter 3 Bad Smells in Code
  • Mysterious Name
  • Duplicated Code
  • Long Function
  • Long Parameter List
  • Global Data
  • Mutable Data
  • Divergent Change
  • Shotgun Surgery
  • Feature Envy
  • Data Clumps
  • Primitive Obsession
  • Repeated Switches
  • Loops
  • Lazy Element
  • Speculative Generality
  • Temporary Field
  • Message Chains
  • Middle Man
  • Insider Trading
  • Large Class
  • Alternative Classes with Different Interfaces
  • Data Class
  • Refused Bequest
  • Comments
  • Chapter 4 Building Tests
  • The Value of Self-Testing Code
  • Sample Code to Test
  • A First Test
  • Add Another Test
  • Modifying the Fixture
  • Probing the Boundaries
  • Much More Than This
  • Chapter 5 Introducing the Catalog
  • Format of the Refactorings
  • The Choice of Refactorings
  • Chapter 6 A First Set of Refactorings
  • Extract Function
  • Inline Function
  • Extract Variable
  • Inline Variable
  • Change Function Declaration
  • Encapsulate Variable
  • Rename Variable
  • Introduce Parameter Object
  • Combine Functions into Class
  • Combine Functions into Transform
  • Split Phase
  • Chapter 7 Encapsulation
  • Encapsulate Record
  • Encapsulate Collection
  • Replace Primitive with Object
  • Replace Temp with Query
  • Extract Class
  • Inline Class
  • Hide Delegate
  • Remove Middle Man
  • Substitute Algorithm
  • Chapter 8 Moving Features
  • Move Function
  • Move Field
  • Move Statements into Function
  • Move Statements to Callers
  • Replace Inline Code with Function Call
  • Slide Statements
  • Split Loop
  • Replace Loop with Pipeline
  • Remove Dead Code
  • Chapter 9 Organizing Data
  • Split Variable
  • Rename Field
  • Replace Derived Variable with Query
  • Change Reference to Value
  • Change Value to Reference
  • Chapter 10 Simplifying Conditional Logic
  • Decompose Conditional
  • Consolidate Conditional Expression
  • Replace Nested Conditional with Guard Clauses
  • Replace Conditional with Polymorphism
  • Introduce Special Case
  • Introduce Assertion
  • Chapter 11 Refactoring APIs
  • Separate Query from Modifier
  • Parameterize Function
  • Remove Flag Argument
  • Preserve Whole Object
  • Replace Parameter with Query
  • Replace Query with Parameter
  • Remove Setting Method
  • Replace Constructor with Factory Function
  • Replace Function with Command
  • Replace Command with Function
  • Chapter 12 Dealing with Inheritance
  • Pull Up Method
  • Pull Up Field
  • Pull Up Constructor Body
  • Push Down Method
  • Push Down Field
  • Replace Type Code with Subclasses
  • Remove Subclass
  • Extract Superclass
  • Collapse Hierarchy
  • Replace Subclass with Delegate
  • Replace Superclass with Delegate
  • Bibliography
  • Index
  • Back End Paper
  • Code Snippets