cover-img

Code Smell 63 - Feature Envy

If your method is jealous and doesn't trust in delegation you should start to do it.

20 April, 2023

1

1

0

If your method is jealous and doesn't trust in delegation you should start to do it.

TL;DR: Don't abuse your friend objects.

Problems

  • Coupling
  • Low Reuse
  • Low Testability
  • Bad Responsibilities Assignment
  • Bijection Fault

The One and Only Software Design Principle

Solutions

  1. Move the method to the appropriate class.

Sample Code

Wrong

class Candidate {

void printJobAddress(Job job) {

System.out.println("This is your position address");

System.out.println(job.address().street());
System.out.println(job.address().city());
System.out.println(job.address().ZipCode());
}
}

Right

class Job {

void printAddress() {

System.out.println("This is your job position address");

System.out.println(this.address().street());
System.out.println(this.address().city());
System.out.println(this.address().ZipCode());

// We might even move this responsibility directly to the address !
// Some address information is relevant to a job and not for package tracking
}
}

class Candidate {
void printJobAddress(Job job) {
job.printAddress();
}
}

Detection

Some linters can detect a sequential pattern of collaborations with another object.

Tags

  • Coupling

Conclusion

  • We should assign responsibilities according to real object mappers and avoid abusing other objects' protocols.

Relations

Code Smell 01 - Anemic Models

Code Smell 89 - Math Feature Envy

More Info

Credits

Photo by Hisu lee on Unsplash


We argue that design practices which take a data-driven approach fail to maximize encapsulation because they focus too quickly on the implementation of objects. We propose an alternative object-oriented design method which takes a responsibility-driven approach.

Rebecca Wirfs-Brock


Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of Your Code


1

1

0

Maxi Contieri

Buenos Aires, Argentina

🎓Learn something new every day.📆 💻CS software engineer 👷coding👨🏽‍🏫teaching ✍🏾writing 🎨Software Design 🏢SOLID 🌉TDD 👴Legacy 💩Code Smells

More Articles

Showwcase is a professional tech network with over 0 users from over 150 countries. We assist tech professionals in showcasing their unique skills through dedicated profiles and connect them with top global companies for career opportunities.

© Copyright 2024. Showcase Creators Inc. All rights reserved.