Behavior is repeated across the system. But we are missing a concept
TL;DR: Put together what belongs together
Problems Addressed
- Code Duplication 
- Missing Abstraction 
- Low Cohesion 
Related Code Smells
Steps
- Extract the methods (and accidentally the properties) coupled into a new concept 
- Use the new concept 
Sample Code
Before
 final class Person {
      private String name;
      // Below cohesive properties
      private String homeAreaCode;
      private String homeNumber;
      public String name() {
          return name;
      }
      // Below cohesive behaviour
      public String telephoneNumber() {
          return ("(" + homeAreaCode + ") " + homeNumber);
      }
      String areaCode() {
          return homeAreaCode;
      }
      String officeNumber() {
          return officeNumber;
      } 
 }
After
// 1. Extract the methods (and accidentally the properties) coupled into a new concept      
   public class TelephoneNumber {
      private String number;
      private String areaCode;
      public String telephoneNumber() {
          return ("(" + areaCode + ") " + _number);
      }
      public String areaCode() {
          return areaCode;
      }
      public String number() {
          return number;
      }
   }
final class Person {
      private String name;
      // 2. Use the new concept
      private TelephoneNumber officeTelephone = new TelephoneNumber();
      public String name() {
          return name;
      }
      public String telephoneNumber(){
          return officeTelephone.getTelephoneNumber();
      }
  }
Type
[X] Automatic
Most IDEs implement this safe refactor.
Why code is better?
Logic code is in just one place together with its rules
Tags
- Classes
See also
Credits
Image from drpepperscott230 on Pixabay
This article is part of the Refactoring Series
 
 
              
 
     
    
Top comments (0)