Behavior is repeated across the system. But we are missing a concept
TL;DR: Put together what belongs together
-
Code Duplication
-
Missing Abstraction
-
Low Cohesion
Code Smell 124 - Divergent Change
Code Smell 147 - Too Many Methods
-
Extract the methods (and accidentally the properties) coupled into a new concept
-
Use the new concept
final class Person {
private String name;
// Below cohesive properties
private String homeAreaCode;
private String homeNumber;
public String name() {
return name;
}
// Below cohesive behavior
public String telephoneNumber() {
return ("(" + homeAreaCode + ") " + homeNumber);
}
String areaCode() {
return homeAreaCode;
}
String officeNumber() {
return officeNumber;
}
}
// 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();
}
}
[X] Automatic
Most IDEs implement this safe refactor.
Logic code is in just one place together with its rules
This is a safe refactoring.
- Classes
Refactoring 002 - Extract Method
Image from drpepperscott230 on Pixabay
This article is part of the Refactoring Series.