Refactoring 007 — Extract Class
Behavior is repeated across the system. But we are missing a concept
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
Code Smell 124 — Divergent Change
You change something in a class. You change something unrelated in the same classmcsee.medium.com
Code Smell 143 — Data Clumps
Some objects are always together. Why do we split them?levelup.gitconnected.com
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.


