Refactoring : Improving the Design of Existing Code

4.24 (6,591 ratings by Goodreads)
By (author) 

Free delivery worldwide

Available. Dispatched from the UK in 1 business day
When will my order arrive?


"Whenever you read [Refactoring ], it's time to read it again. And if you haven't read it yet, please do before writing another line of code." -David Heinemeier Hansson, Creator of Ruby on Rails, Founder & CTO at Basecamp

Fully Revised and Updated-Includes New Refactorings and Code Examples

"Any fool can write code that a computer can understand. Good programmers write code that humans can understand."
-M. Fowler (1999)

For more than twenty years, experienced programmers worldwide have relied on Martin Fowler's Refactoring to improve the design of existing code and to enhance software maintainability, as well as to make existing code easier to understand.

This eagerly awaited new edition has been fully updated to reflect crucial changes in the programming landscape. Refactoring, Second Edition, features an updated catalog of refactorings and includes JavaScript code examples, as well as new functional examples that demonstrate refactoring without classes.

Like the original, this edition explains what refactoring is; why you should refactor; how to recognize code that needs refactoring; and how to actually do it successfully, no matter what language you use.

Understand the process and general principles of refactoring
Quickly apply useful refactorings to make a program easier to comprehend and change
Recognize "bad smells" in code that signal opportunities to refactor
Explore the refactorings, each with explanations, motivation, mechanics, and simple examples
Build solid tests for your refactorings
Recognize tradeoffs and obstacles to refactoring

Includes free access to the canonical web edition, with even more refactoring resources. (See inside the book for details about how to access the web edition.)
show more

Product details

  • Hardback | 448 pages
  • 195 x 240 x 20mm | 751g
  • Addison Wesley
  • Boston, United States
  • English
  • 2nd edition
  • 0134757599
  • 9780134757599
  • 7,201

Table of contents

Foreword to the First Edition xi

Preface xiii

Chapter 1: Refactoring: A First Example 1

The Starting Point 1

Comments on the Starting Program 3

The First Step in Refactoring 5

Decomposing the statement Function 6

Status: Lots of Nested Functions 22

Splitting the Phases of Calculation and Formatting 24

Status: Separated into Two Files (and Phases) 31

Reorganizing the Calculations by Type 34

Status: Creating the Data with the Polymorphic Calculator 41

Final Thoughts 43

Chapter 2: Principles in Refactoring 45

Defining Refactoring 45

The Two Hats 46

Why Should We Refactor? 47

When Should We Refactor? 50

Problems with Refactoring 55

Refactoring, Architecture, and Yagni 62

Refactoring and the Wider Software Development Process 63

Refactoring and Performance 64

Where Did Refactoring Come From? 67

Automated Refactorings 68

Going Further 70

Chapter 3: Bad Smells in Code 71

Mysterious Name 72

Duplicated Code 72

Long Function 73

Long Parameter List 74

Global Data 74

Mutable Data 75

Divergent Change 76

Shotgun Surgery 76

Feature Envy 77

Data Clumps 78

Primitive Obsession 78

Repeated Switches 79

Loops 79

Lazy Element 80

Speculative Generality 80

Temporary Field 80

Message Chains 81

Middle Man 81

Insider Trading 82

Large Class 82

Alternative Classes with Different Interfaces 83

Data Class 83

Refused Bequest 83

Comments 84

Chapter 4: Building Tests 85

The Value of Self-Testing Code 85

Sample Code to Test 87

A First Test 90

Add Another Test 93

Modifying the Fixture 95

Probing the Boundaries 96

Much More Than This 99

Chapter 5: Introducing the Catalog 101

Format of the Refactorings 101

The Choice of Refactorings 102

Chapter 6: A First Set of Refactorings 105

Extract Function 106

Inline Function 115

Extract Variable 119

Inline Variable 123

Change Function Declaration 124

Encapsulate Variable 132

Rename Variable 137

Introduce Parameter Object 140

Combine Functions into Class 144

Combine Functions into Transform 149

Split Phase 154

Chapter 7: Encapsulation 161

Encapsulate Record 162

Encapsulate Collection 170

Replace Primitive with Object 174

Replace Temp with Query 178

Extract Class 182

Inline Class 186

Hide Delegate 189

Remove Middle Man 192

Substitute Algorithm 195

Chapter 8: Moving Features 197

Move Function 198

Move Field 207

Move Statements into Function 213

Move Statements to Callers 217

Replace Inline Code with Function Call 222

Slide Statements 223

Split Loop 227

Replace Loop with Pipeline 231

Remove Dead Code 237

Chapter 9: Organizing Data 239

Split Variable 240

Rename Field 244

Replace Derived Variable with Query 248

Change Reference to Value 252

Change Value to Reference 256

Chapter 10: Simplifying Conditional Logic 259

Decompose Conditional 260

Consolidate Conditional Expression 263

Replace Nested Conditional with Guard Clauses 266

Replace Conditional with Polymorphism 272

Introduce Special Case 289

Introduce Assertion 302

Chapter 11: Refactoring APIs 305

Separate Query from Modifier 306

Parameterize Function 310

Remove Flag Argument 314

Preserve Whole Object 319

Replace Parameter with Query 324

Replace Query with Parameter 327

Remove Setting Method 331

Replace Constructor with Factory Function 334

Replace Function with Command 337

Replace Command with Function 344

Chapter 12: Dealing with Inheritance 349

Pull Up Method 350

Pull Up Field 353

Pull Up Constructor Body 355

Push Down Method 359

Push Down Field 361

Replace Type Code with Subclasses 362

Remove Subclass 369

Extract Superclass 375

Collapse Hierarchy 380

Replace Subclass with Delegate 381

Replace Superclass with Delegate 399

Bibliography 405

Index 409
show more

Review Text

"Whenever you read Refactoring], it's time to read it again. And if you haven't read it...
show more

About Martin Fowler

Martin Fowler is Chief Scientist at ThoughtWorks. He describes himself as "an author, speaker, consultant and general loud-mouth on software development." Fowler concentrates on designing enterprise software: exploring what makes a good design and what practices are needed to create one.
show more

Rating details

6,591 ratings
4.24 out of 5 stars
5 46% (3,052)
4 37% (2,410)
3 13% (869)
2 3% (182)
1 1% (78)
Book ratings by Goodreads
Goodreads is the world's largest site for readers with over 50 million reviews. We're featuring millions of their reader ratings on our book pages to help you find your new favourite book. Close X