DEV Community

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

Posted on • Originally published at maximilianocontieri.com

6 1

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

Sentry image

Hands-on debugging session: instrument, monitor, and fix

Join Lazar for a hands-on session where you’ll build it, break it, debug it, and fix it. You’ll set up Sentry, track errors, use Session Replay and Tracing, and leverage some good ol’ AI to find and fix issues fast.

RSVP here →

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay