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