Skip to content

Latest commit

 

History

History
133 lines (85 loc) · 3.28 KB

File metadata and controls

133 lines (85 loc) · 3.28 KB

Code Smell 143 - Data Clumps

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

  1. Extract Class

  2. 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)
    {
        if (from >= to)
        {
            throw new ArgumentException
                ("Invalid time interval:" + 
                 " ’from’ must be earlier than ’to’.");
        }
        From = from;
        To = to;
    }
}

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

// Even Better...

public DinnerTable(Person guest, Interval reservationTime)
{    
    Guest = guest;
    Interval = reservationTime;
}

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

Code Smell 122 - Primitive Obsession

Code Smell 01 - Anemic Models

Code Smell 27 - Associative Arrays

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

Software Engineering Great Quotes


This article is part of the CodeSmell Series.

How to Find the Stinky Parts of your Code