If you see your objects as data holders you will violate their encapsulation, but you shouldn't, as in real life, you should always ask for consent.
TL;DR: Don't mess with other object's data.
Problems
Information Hiding Violation
Encapsulation Violation
Coupling
Solutions
- Couple to interfaces and behavior, never data.
Sample Code
Wrong
<? final class Point { public $x; public $y; } final class DistanceCalculator { function distanceBetween(Point $origin, Point $destination) { return sqrt((($destination->x - $origin->x) ^ 2) + (($destination->y - $origin->y) ^ 2)); } } Right
<? final class Point { private $rho; private $theta; public function x() { return $this->rho * cos($this->theta); } public function y() { return $this->rho * sin($this->theta); } } final class DistanceCalculator { function distanceBetween(Point $origin, Point $destination) { return sqrt((($destination->x() - $origin->x() ^ 2) + (($destination->y() - $origin->y()) ^ 2))); } } Detection
You can set your linters to warn you for public attributes, setters and getters usage and discourage them.
Tags
- Coupling
Conclusion
If your classes are polluted with setters, getters and public methods you will certainly have ways to couple to their accidental implementation.
Also Known as
- Inappropriate intimacy
Relations
Code Smell 01 - Anemic Models
Maxi Contieri ・ Oct 20 '20
More info
Credits
Picture by Nicolas Poussin
A data structure is just a stupid programming language.
Bill Gosper
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.
How to Find the Stinky parts of your Code
Maxi Contieri ・ May 21 '21
Last update: 2021/06/14
Top comments (0)