Code Smell 143 - Data Clumps
Some objects are always together. Why don't we split them?

TL;DR: Make cohesive primitive objects travel together
Problems
Bad Cohesion
Duplicated Code
Validation Complexity
Readability
Maintainability
Solutions
Extract Class
Find small objects
Context
This smell is friends with primitive obsession.
If two or more primitive objects are glued together, with business logic repeated and rules between them, we need to find the existing concept on the bijection.
Sample Code
Wrong
public class DinnerTable
{
public DinnerTable(Person guest, DateTime from, DateTime to)
{
Guest = guest;
From = from;
To = to;
}
private Person Guest;
private DateTime From;
private DateTime To;
}
Right
public class TimeInterval
{
public TimeInterval(DateTime from, DateTime to)
{
// We should validate From < To
From = from;
To = to;
}
}
public DinnerTable(Person guest, DateTime from, DateTime to)
{
Guest = guest;
Interval = new TimeInterval(from, to);
}
Detection
[X] Semi-Automatic
Detection based on cohesion patterns is available o a few linters.
Tags
- Cohesion
Conclusion
Group behavior in the right place and hide the primitive data.
Relations
More Info
Credits
Photo by Dynamic Wang on Unsplash
The heart of the software is its ability to solve domain-related problems for its user. All other features, vital though they may be, support this basic purpose.
Eric Evans
This article is part of the CodeSmell Series.
About the author
I’m a senior software engineer loving clean code, and declarative designs. S.O.L.I.D. and agile methodologies fan.
Comments
Join the discussionNo comments yet. Be the first to comment.
Code Smells
In this series, we will see several symptoms and situations that make us doubt the quality of our developments. We will present possible solutions. Most are just clues. They are no hard rules.





