Introducing Refactoring
- 30m 10s
—Introduction
2m 10s
—What is Refactoring?
4m 26s
—Why Should You Refactor?
1m 41s
—Technical Debt
1m 31s
—When Should You Refactor
4m 51s
—Refactoring Principles
1m 43s
—The Refactoring Process
1m 50s
—Demo: Characterization Tests
2m 51s
—Refactoring Tips
1m 11s
—Refactoring Tools
1m 51s
—Premature Optimization
1m 3s
—Refactoring and Tests
1m 9s
—Demo: A Simple Refactoring
2m 30s
—Summary
1m 23s
Bloating Code Smells
- 48m 43s
—Introduction
0m 44s
—Code Smells
1m 38s
—Principle of Least Surprise
1m 27s
—Organizing Code Smells
0m 48s
—The Bloaters
0m 54s
—Long Method
3m 58s
—Long Method Examples
19m 11s
—Primitive Obsession
5m 36s
—Long Parameter List
6m 52s
—Data Clumps
2m 18s
—Combinatorial Explosion
2m 22s
—Oddball Solution
0m 43s
—Class Doesn't Do Much
0m 29s
—Required Setup/Teardown Code
0m 57s
—Summary
0m 46s
Obfuscating Code Smells
- 26m 25s
—Introduction
0m 45s
—The Obfuscators
0m 39s
—Regions
4m 34s
—Comments
8m 25s
—Poor Names
8m 47s
—Vertical Separation
0m 56s
—Inconsistency
0m 32s
—Obscured Intent
1m 3s
—Summary
0m 44s
Object Orientation Abuser Code Smells
- 18m 33s
—Introduction
0m 47s
—Switch Statements
5m 4s
—Temporary Field
4m 7s
—Alternative Classes with Different Interfaces
1m 34s
—Class Depends on Subclass
4m 28s
—Inappropriate Static
0m 58s
—Summary
1m 35s
Code Smells: Change Preventer
- 16m 16s
—Introduction
0m 43s
—Change Preventers
1m 8s
—Divergent Change
0m 56s
—Shotgun Surgery
1m 29s
—Parallel Inheritance Hierarchies
1m 58s
—Inconsistent Abstraction Levels
2m 7s
—Conditional Complexity
5m 53s
—Poorly Written Tests
1m 3s
—Summary
0m 59s
Code Smells: Dispensables
- 12m 45s
—Introduction
0m 30s
—The Dispensables
0m 25s
—Lazy Class
1m 10s
—Data Class
3m 12s
—Duplicate Code
1m 56s
—Dead Code
1m 47s
—Speculative Generality
2m 23s
—Summary
1m 22s
Code Smells: The Couplers
- 24m 25s
—Introduction
0m 30s
—The Couplers
0m 43s
—Feature Envy
3m 43s
—Inappropriate Intimacy
1m 57s
—Law of Demeter
3m 51s
—Indecent Exposure
0m 49s
—Message Chains
0m 50s
—Middle Man
0m 56s
—Tramp Data
0m 37s
—Artificial Coupling
0m 39s
—Hidden Temporal Coupling
2m 55s
—Hidden Dependencies
4m 59s
—Summary
1m 56s
Environment and Testing Code Smells
- 1h 6m
—Introduction
0m 36s
—Environment Smells
8m 5s
—Test Smells
1m 31s
—Not Enough Tests
2m 14s
—DRY vs. DAMP
1m 36s
—Fragility
15m 56s
—The Liar
1m 29s
—Excessive Setup
1m 9s
—The Giant
0m 47s
—The Mockery
1m 8s
—The Inspector
0m 47s
—Generous Leftovers
1m 34s
—The Local Hero
0m 40s
—The Nitpicker
1m 4s
—The Secret Catcher
1m 12s
—The Loudmouth
1m 3s
—The Greedy Catcher
0m 49s
—The Sequencer
0m 25s
—The Hidden Dependency
1m 18s
—The Enumerator
0m 46s
—The Stranger
0m 49s
—The OS Evangelist
0m 49s
—Success Against All Odds
1m 19s
—The Free Ride
0m 46s
—The One
0m 43s
—The Peeping Tom
0m 49s
—The Slow Poke
0m 53s
—The Contradiction
1m 9s
—Roll the Dice
6m 22s
—Hidden Tests
1m 56s
—Second Class Citizens
0m 46s
—Wait and See
1m 30s
—Inappropriate Test Group
1m 5s
—The Optimist
0m 39s
—The Sleeper
1m 5s
—The Void
0m 23s
—Summary
1m 10s
Method Refactorings
- 33m 22s
—Introduction
0m 45s
—Extract Method
1m 46s
—Rename Method
3m 0s
—Demo: Extract and Rename Method
4m 48s
—Inline Method
1m 55s
—Introduce Explaining Variable
1m 54s
—Inline Temp
0m 57s
—Replace Temp with Query
1m 22s
—Demo: Replace Temp with Query
2m 46s
—Split Temporary Variable
1m 35s
—Parameterize Method
1m 17s
—Replace Parameter with Explicit Methods
2m 9s
—Add Parameter
1m 28s
—Remove Parameter
3m 26s
—Separate Query from Modifier
3m 38s
—Summary
0m 36s
More Method Refactorings
- 30m 53s
—Introduction
0m 39s
—Preserve Whole Object
3m 2s
—Replace Parameter with Method
1m 41s
—Introduce Parameter Object
2m 24s
—Remove Setting Method
1m 33s
—Hide Method
0m 58s
—Replace Constructor with Factory Method
2m 39s
—Replace Error Code with Exception
3m 4s
—Remove Assignments to Parameters
1m 1s
—Replace Exception with Test
2m 22s
—Replace Method with Method Object
4m 31s
—Compose Method
3m 16s
—Substitute Algorithm
2m 48s
—Summary
0m 55s
Class and Object Refactorings
- 31m 10s
—Introduction
1m 0s
—Encapsulate Field
2m 3s
—Encapsulate Collection
3m 10s
—Move Field
2m 24s
—Move Method
4m 33s
—Extract Class
2m 32s
—Inline Class
1m 31s
—Extract Interface
2m 8s
—Extract Subclass
2m 54s
—Extract Superclass
4m 1s
—Hide Delegate
2m 17s
—Remove Middle Man
1m 51s
—Summary
0m 46s
Class Hierarchy Refactorings
- 32m 9s
—Introduction
0m 44s
—Pull Up Field
2m 23s
—Push Down Field
2m 3s
—Pull Up Method
3m 20s
—Push Down Method
2m 18s
—Collapse Hierarchy
2m 48s
—Replace Inheritance with Delegation
3m 32s
—Replace Delegation with Inheritance
2m 37s
—Replace Type Code with Class
4m 41s
—Replace Type Code with Subclasses
3m 7s
—Replace Conditional with Polymorphism
3m 50s
—Summary
0m 46s
Pattern-Based Refactorings
- 1h 3m
—Introduction
1m 4s
—Encapsulate Classes with Factory
3m 38s
—Form Template Method
4m 48s
—Introduce Null Object
5m 26s
—Move Accumulation to Visitor
8m 3s
—Move Embellishment to Decorator
6m 52s
—Replace Conditional Dispatcher with Command
5m 30s
—Replace Conditional Logic with Strategy
6m 27s
—Replace State-Altering Conditionals with State
8m 2s
—Replace Type Code with State (or Strategy)
3m 53s
—Unify Interfaces with Adapter
8m 24s
—Summary
1m 2s
Gilded Rose Kata
- 47m 7s
—Introduction
3m 44s
—Gilded Rose Kata Setup
2m 3s
—Beginning the Kata
3m 3s
—Adding First Tests
7m 58s
—Testing Aged Brie
3m 13s
—Testing Sulfuras
0m 56s
—Testing Backstage Passes
3m 1s
—Refactoring with StoreItem
7m 8s
—Testing Individual Strategies
5m 55s
—Adding Conjured Item Support
7m 38s
—Summary
2m 28s