Fowler/Martin Code Refactoring Best Practices
Comprehensive code refactoring guide based on Martin Fowler's catalog and Clean Code principles, designed for AI agents and LLMs. Contains 43 rules across 8 categories, prioritized by impact to guide automated refactoring and code generation.
When to Apply
Reference these guidelines when:
-
Refactoring existing code to improve maintainability
-
Decomposing long methods or large classes
-
Reducing coupling between components
-
Simplifying complex conditional logic
-
Reviewing code for code smells and anti-patterns
Rule Categories by Priority
Priority Category Impact Prefix
1 Structure & Decomposition CRITICAL struct-
2 Coupling & Dependencies CRITICAL couple-
3 Naming & Clarity HIGH name-
4 Conditional Logic HIGH cond-
5 Abstraction & Patterns MEDIUM-HIGH pattern-
6 Data Organization MEDIUM data-
7 Error Handling MEDIUM error-
8 Micro-Refactoring LOW micro-
Quick Reference
- Structure & Decomposition (CRITICAL)
-
struct-extract-method
-
Extract Method for Long Functions
-
struct-single-responsibility
-
Apply Single Responsibility Principle
-
struct-extract-class
-
Extract Class from Large Class
-
struct-compose-method
-
Compose Method for Readable Flow
-
struct-function-length
-
Keep Functions Under 20 Lines
-
struct-replace-method-with-object
-
Replace Method with Method Object
-
struct-parameter-object
-
Introduce Parameter Object
- Coupling & Dependencies (CRITICAL)
-
couple-dependency-injection
-
Use Dependency Injection
-
couple-hide-delegate
-
Hide Delegate to Reduce Coupling
-
couple-remove-middle-man
-
Remove Middle Man When Excessive
-
couple-feature-envy
-
Fix Feature Envy by Moving Methods
-
couple-interface-segregation
-
Apply Interface Segregation Principle
-
couple-preserve-whole-object
-
Preserve Whole Object Instead of Fields
- Naming & Clarity (HIGH)
-
name-intention-revealing
-
Use Intention-Revealing Names
-
name-avoid-abbreviations
-
Avoid Abbreviations and Acronyms
-
name-consistent-vocabulary
-
Use Consistent Vocabulary
-
name-searchable-names
-
Use Searchable Names
-
name-avoid-encodings
-
Avoid Type Encodings in Names
- Conditional Logic (HIGH)
-
cond-guard-clauses
-
Replace Nested Conditionals with Guard Clauses
-
cond-polymorphism
-
Replace Conditional with Polymorphism
-
cond-decompose
-
Decompose Complex Conditionals
-
cond-consolidate
-
Consolidate Duplicate Conditional Fragments
-
cond-special-case
-
Introduce Special Case Object
-
cond-lookup-table
-
Replace Conditional with Lookup Table
- Abstraction & Patterns (MEDIUM-HIGH)
-
pattern-strategy
-
Extract Strategy for Algorithm Variants
-
pattern-template-method
-
Use Template Method for Shared Skeleton
-
pattern-factory
-
Use Factory for Complex Object Creation
-
pattern-open-closed
-
Apply Open-Closed Principle
-
pattern-composition-over-inheritance
-
Prefer Composition Over Inheritance
-
pattern-extract-superclass
-
Extract Superclass for Common Behavior
- Data Organization (MEDIUM)
-
data-encapsulate-collection
-
Encapsulate Collection
-
data-replace-primitive
-
Replace Primitive with Object
-
data-encapsulate-record
-
Encapsulate Record into Class
-
data-split-variable
-
Split Variable with Multiple Assignments
-
data-replace-temp-with-query
-
Replace Temp with Query
- Error Handling (MEDIUM)
-
error-exceptions-over-codes
-
Use Exceptions Instead of Error Codes
-
error-custom-exceptions
-
Create Domain-Specific Exception Types
-
error-fail-fast
-
Fail Fast with Preconditions
-
error-separate-concerns
-
Separate Error Handling from Business Logic
- Micro-Refactoring (LOW)
-
micro-remove-dead-code
-
Remove Dead Code
-
micro-inline-variable
-
Inline Trivial Variables
-
micro-simplify-expressions
-
Simplify Boolean Expressions
-
micro-rename-for-clarity
-
Rename for Clarity
How to Use
Read individual reference files for detailed explanations and code examples:
-
Section definitions - Category structure and impact levels
-
Rule template - Template for adding new rules
-
Individual rules: references/{prefix}-{slug}.md
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md