One class calculating formulas for another class.
TL;DR: Leave the formulas to the objects gathering the information.
Problems
Declaratively
Low reuse
Real-world concept missing
Encapsulation
Solutions
Move the math formula to the class
Search for real-world abstractions
Sample Code
Wrong
function area(rectangle) {
return rectange.width * rectangle.height;
//Notice we are sending consecutive messages to
//the same object and doing calculations
}
Right
class Rectangle {
constructor(width, height, color) {
this.height = height;
this.width = width;
}
area() {
return this.width * this.height;
}
}
Detection
Since many cascading messages are sending to the same object, we can detect a pattern.
Tags
Encapsulation
Coupling
Conclusion
This is a very basic smell. If we are manipulating another object characteristics, we should let it do it the maths for us.
Relations
More Info
Credits
Photo by Michal Matlon on Unsplash
Computer science is not about machines, in the same way that astronomy is not about telescopes. There is an essential unity of mathematics and computer science.
Michael R. Fellows
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.