Skip to main content

Command Palette

Search for a command to run...

Code Smell 182 - Over Generalization

We are refactoring fans. Sometimes we need to stop and think.

Updated
1 min read
Code Smell 182 - Over Generalization

TL;DR: Don't make generalizations beyond real knowledge.

Problems

Solutions

  1. Think before making structural generalizations

Context

Refactoring is not just looking at structural code.

We need to refactor behavior and check if it needs an abstraction.

Sample Code

Wrong

fn validate_size(value: i32) {
         validate_integer(value);
}

fn validate_years(value: i32) {
         validate_integer(value);
}

fn validate_integer(value: i32) {
         validate_type(value, :integer);
         validate_min_integer(value, 0);
}

Right

fn validate_size(value: i32) {
        validate_type(value, Type::Integer);
        validate_min_integer(value, 0);
}

fn validate_years(value: i32) {
        validate_type(value, Type::Integer);
        validate_min_integer(value, 0);
}

// Duplication is accidental, therefore we should not abstract it

Detection

[X] Manual

This is a semantic smell.

Tags

  • Duplication

Conclusion

Software development is a thinking activity.

We have automated tools to help and assist us. We need to be in charge.

Relations

More Info

Disclaimer

Code Smells are just my opinion.

Credits

Photo by Matthew Henry on Unsplash


Duplication is far cheaper than the wrong abstraction.

Sandi Metz


This article is part of the CodeSmell Series.

Code Smells

Part 1 of 50

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.