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
1. Structure & Decomposition (CRITICAL)
struct-extract-method- Extract Method for Long Functionsstruct-single-responsibility- Apply Single Responsibility Principlestruct-extract-class- Extract Class from Large Classstruct-compose-method- Compose Method for Readable Flowstruct-function-length- Keep Functions Under 20 Linesstruct-replace-method-with-object- Replace Method with Method Objectstruct-parameter-object- Introduce Parameter Object
2. Coupling & Dependencies (CRITICAL)
couple-dependency-injection- Use Dependency Injectioncouple-hide-delegate- Hide Delegate to Reduce Couplingcouple-remove-middle-man- Remove Middle Man When Excessivecouple-feature-envy- Fix Feature Envy by Moving Methodscouple-interface-segregation- Apply Interface Segregation Principlecouple-preserve-whole-object- Preserve Whole Object Instead of Fields
3. Naming & Clarity (HIGH)
name-intention-revealing- Use Intention-Revealing Namesname-avoid-abbreviations- Avoid Abbreviations and Acronymsname-consistent-vocabulary- Use Consistent Vocabularyname-searchable-names- Use Searchable Namesname-avoid-encodings- Avoid Type Encodings in Names
4. Conditional Logic (HIGH)
cond-guard-clauses- Replace Nested Conditionals with Guard Clausescond-polymorphism- Replace Conditional with Polymorphismcond-decompose- Decompose Complex Conditionalscond-consolidate- Consolidate Duplicate Conditional Fragmentscond-special-case- Introduce Special Case Objectcond-lookup-table- Replace Conditional with Lookup Table
5. Abstraction & Patterns (MEDIUM-HIGH)
pattern-strategy- Extract Strategy for Algorithm Variantspattern-template-method- Use Template Method for Shared Skeletonpattern-factory- Use Factory for Complex Object Creationpattern-open-closed- Apply Open-Closed Principlepattern-composition-over-inheritance- Prefer Composition Over Inheritancepattern-extract-superclass- Extract Superclass for Common Behavior
6. Data Organization (MEDIUM)
data-encapsulate-collection- Encapsulate Collectiondata-replace-primitive- Replace Primitive with Objectdata-encapsulate-record- Encapsulate Record into Classdata-split-variable- Split Variable with Multiple Assignmentsdata-replace-temp-with-query- Replace Temp with Query
7. Error Handling (MEDIUM)
error-exceptions-over-codes- Use Exceptions Instead of Error Codeserror-custom-exceptions- Create Domain-Specific Exception Typeserror-fail-fast- Fail Fast with Preconditionserror-separate-concerns- Separate Error Handling from Business Logic
8. Micro-Refactoring (LOW)
micro-remove-dead-code- Remove Dead Codemicro-inline-variable- Inline Trivial Variablesmicro-simplify-expressions- Simplify Boolean Expressionsmicro-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