Code Smells

Code Smells / Dispensables / Data Class

Data Class code smell icon

Data Class

A Data Class smell occurs when a class does not implement enough functionality itself to justify it being a class.

This means that the class defines instance variables, but lacks relevant methods. Such classes are very likely being manipulated by other classes heavily.

Often, this is an indication that relevant functionality for that data it stores is being implemented elsewhere in the code, or that the data stored in objects of the class should be storied in another class.

To avoid this code smell, ensure that relevant functionality for the data is being stored in methods in the class, and that the data is being stored in the class which is most appropriate for it.

from math import sqrt

# Smelly code
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

my_coordinates = Coordinates(4, -7, 43)
print(sqrt(my_coordinates.x_coordinate**2 + my_coordinates.y_coordinate**2 + my_coordinates.z_coordinate**2))  # Pythagorean theorem

# Fixed code
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())

Books about code smells

Learn to write better smelling code.

Refactoring: Improving the Design of Existing Code book cover

Refactoring: Improving the Design of Existing Code

Code smells: A Predictor of Remarkable Quality Improvement book cover

Code smells: A Predictor of Remarkable Quality Improvement

Clean Code: A Handbook of Agile Software Craftsmanship book cover

Clean Code: A Handbook of Agile Software Craftsmanship

I receive a commission on sales made from the above affiliate links.