Any fool can write code that
computer can understand.



     Good programmers write code
    that humans can understand.



                               Martin Fowler - Refactoring
Calendar c = Calendar.getInstance();
c.set(2005, Calendar.NOVEMBER, 20);
c.getTime();




november(20, 2005);
bug
•
•
•
•
OCP
(Open-Closed Principle)
DRY
(Don’t Repeat Yourself)
SRP
(Single Responsibility Principle)
LSP
(Liskov Substitution Principle)
(duplicated code)
(long method)
(large class)
(long parameter list)
(divergent change)
     class
(shotgun surgery)
        classes
(feature envy)
(primitive obsession)
switch
(switch statements)
(lazy class)
(speculative generality)
(data class)
(refused bequest)
(comments)
(Extract Method)
      Eclipse✔
(Inline Method)
     Eclipse✔
(Inline Temp)
    Eclipse✔
(Replace Temp with Query)
          Eclipse✘
(Introduce Explaining Variable)
             Eclipse✔
(Split Temporary Variable)
           Eclipse✘
Remove Assignments to
   Parameters
       Eclipse✘
(Move Method)
    Eclipse✔
(Move Field)
    Eclipse✔
(Extract Class)
     Eclipse✔
(Replace Data Value with
        Object)
          Eclipse✘
(Replace Magic Number with
    Symbolic Constant)
           Eclipse✔
(Encapsulate Collection)
          Eclipse✘
(Replace Type Code with
         Class)
         Eclipse✘
(Replace Type Code with
       Subclasses)
         Eclipse✘
State/Strategy
(Replace Type Code with State/
           Strategy)
             Eclipse✘
(Decompose Conditional)
      Eclipse✔ (Use Extract Method)
(Consolidate Conditional
      Expression)
          Eclipse✔
(Consolidate Duplicate
Conditional Fragments)
         Eclipse✘
(Replace Nested Conditional
    with Guard Clauses)
           Eclipse✘
(Replace Conditional with
     Polymorphism)
          Eclipse✘
null
(Introduce Null Object)
         Eclipse✘
(Rename Method)
     Eclipse✔
(Add Parameter)
     Eclipse✔
(Remove Parameter)
       Eclipse✔
(Separate Query from
      Modifier)
   Eclipse✔ (extract two methods and rename)
(Parameterize Method)
        Eclipse✘
(Preserve Whole Object)
         Eclipse✘
(Introduce Parameter Object)
            Eclipse✔
More…
One more thing…

Refactoring