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)