Code Smell 143 - Data Clumps

Photo by Dynamic Wang on Unsplash

Code Smell 143 - Data Clumps

Some objects are always together. Why don't we split them?

Maxi Contieri
·Jun 22, 2022·

2 min read

Subscribe to my newsletter and never miss my upcoming articles

Play this article

Table of contents

  • Problems
  • Solutions
  • Context
  • Sample Code
  • Detection
  • Tags
  • Conclusion
  • Relations
  • More Info
  • Credits

TL;DR: Make cohesive primitive objects travel together


  • Bad Cohesion

  • Duplicated Code

  • Validation Complexity

  • Readability

  • Maintainability


  1. Extract Class

  2. Find small objects


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


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;


public class TimeInterval
    public TimeInterval(DateTime from, DateTime tol)
        // We shoud validate From < To
        From = from;
        To = to;

public DinnerTable(Person guest, DateTime from, DateTime to)
    Guest = guest;
    Interval = new TimeInterval(from, to);


[X] Semi-Automatic

Detection based on cohesion patterns is available o a few linters.


  • Cohesion


Group behavior in the right place and hide the primitive data.


More Info


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.

Share this


Technical Opinions are my own. I don't have the revealed truth.

Software Design is a creative activity. These are hints and not rigid rules.

I write on BackEnd Business Systems and OOP Design. My advice/experience might not suit other systems.

You can write me at info(at)