Data clumps are sets of related primitives (eg.
False) that always appear together. Data Clumps can be avoided by encapsulating them together in a class.
from math import sqrt # Code smell x_coordinate = 4 y_coordinate = -7 z_coordinate = 43 distance = sqrt(x_coordinate**2 + y_coordinate**2 + z_coordinate**2) # Pythagorean theorem print(distance) # Improved class Coordinates: def __init__(self, x_coordinate, y_coordinate, z_coordinate): self.x_coordinate = x_coordinate self.y_coordinate = y_coordinate self.z_coordinate = z_coordinate def distance(self): return sqrt(self.x_coordinate**2 + self.y_coordinate**2 + self.z_coordinate**2) # Pythagorean theorem my_coordinates = Coordinates(4, -7, 43) print(my_coordinates.distance())
The problem with Data Clumps, is that it is not easy to centrally control their behaviour. In the example above, if we wanted to restrict
y_coordinate to positive numbers only, we may need to edit the code in many places, leading to Shotgun Surgery.
Data Clumps are also often Primitive Obsessions.
Books about code smells
Learn to write better smelling code.
Refactoring: Improving the Design of Existing Code
Code smells: A Predictor of Remarkable Quality Improvement
Clean Code: A Handbook of Agile Software Craftsmanship