Refactoring 007 — Extract Class
Behavior is repeated across the system. But we are missing a concept
Published in
2 min readJul 4, 2022
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 like IntelliJIDEA and Eclipse 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.