DEV Community

Cover image for Refactoring 007 - Extract Class
Maxi Contieri
Maxi Contieri

Posted on • Originally published at maximilianocontieri.com

Refactoring 007 - Extract Class

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

  1. Extract the methods (and accidentally the properties) coupled into a new concept

  2. 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; } } 
Enter fullscreen mode Exit fullscreen mode

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(); } } 
Enter fullscreen mode Exit fullscreen mode

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

Refactoring.com

Refactoring Guru

Credits

Image from drpepperscott230 on Pixabay


This article is part of the Refactoring Series

Top comments (0)