Refactoring Katas
Break Seams in TripService.getTripsByUser()
Polymorphic Parrot Speed and Cry
Refactor Gilded Rose and Add Conjured Items
Refactor Supermarket Receipt Offer Engine
Refactor TennisGame1 Scoring
Refactor the Theatrical Players statement()
Refactor the Ugly Trivia Game
Open Closed & Polymorphism
Composable Validation Rules
Extract Exporter Strategy Per Format
Refactor Discounts to Strategy Pattern
Refactor NotificationService to Strategy
Refactor PaymentProcessor to Strategy
Replace Shipping-Cost Conditionals With Strategies
Replace Type Switch With Polymorphism
Replace Type Switch With Shape Polymorphism
Dry & Duplication
Consolidate Duplicate Statements Across Branches
Extract Duplicated Calculation Into a Helper
Extract Magic Numbers Into Constants
Extract Shared Input Validation
Parameterize Two Near-Identical Functions
Dependency Inversion & Injection
Decouple ProductService From the Database
Inject a Logger Abstraction
Inject a PaymentGateway Seam
Inject a Random Source Seam
Inject EmailSender via Constructor
Inject OrderService Dependencies via Constructor
Inject the HTTP Transport as a Parameter
Invert ReportService Infra Dependencies
Replace Payment Switch With Polymorphism
Interface Segregation
Depend on a Narrow Role Interface
Segregate the Fat Worker Interface
Segregate the Multifunction Device Interface
Split Repository Into Read and Write
Composition Over Inheritance
Eliminate a Refused Bequest
Replace Notifier Inheritance With Delegation
Replace Subclass Explosion With Strategy Injection
Replace Subclass Tree With Strategies
Encapsulation & Law Of Demeter
Encapsulate a Public Mutable Field
Encapsulate the Exposed Collection
Extract a Money Value Object
Fix Feature Envy With Move Method
Guard an Invariant Behind Behavior
Hide Delegate to Fix Demeter Violation
Relocate Alerting With Tell-Don't-Ask
Tell, Don't Ask: wallet.pay(amount)
Liskov Substitution
Extract a Flyable Abstraction
Fix the Square/Rectangle LSP Violation
Honor the Base withdraw() Contract
Split the Read and Mutation Contracts
Single Responsibility & Cohesion
Extract a Repository Seam
Extract Class From God Class
Separate Report Data From Formatting
Split Employee With Extract Class
Split the OrderService God Class
Kiss & Yagni
Extract Steps From a Long Method
Introduce a Parameter Object
Split the Flag Argument Into Two Functions
Immutability & Pure Functions
Make Discount Greeting Pure
Refactor Mutating Sorter to Pure Function
Separate Computation From Printing
Split Pure Core From Side Effects