The code smells bad. Let’s see how to change the aromas. 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 of these smells are just hints of something that might be wrong. They are not rigid rules.

Code Smell 01 — Anemic Models

Your objects are a bunch of public attributes without behavior.
Protocol is empty (with setters/getters).
If we ask a domain expert to describe an entity he/she would hardly tell it is ‘a bunch of attributes’.

Problems

Solutions

Examples

Sample Code

Wrong

Right

Detection

Detection can be automated with sophisticated linters ignoring setters and getters and counting real behavior methods.

Also Known as

Tags

More info:

Code Smell 02 — Constants and Magic Numbers

A method makes calculations with lots of numbers without describing their semantics.

Problems

Solutions

Examples

Sample Code

Wrong

Right

Detection

Many linters can detect number literal in attributes and methods.

Tags

More info

Code Smell 03 — Functions Are Too Long

Humans get bored beyond line 10.
Photo by Hari Panicker on Unsplash

Problems

Solutions

Examples

Sample Code

Wrong

Right

Detection

All linters can measure and warn when methods are larger than a predefined threshold.

Also Known as

More info

Tags

Code Smell 04 — String Abusers

Too many parsing, exploding, regex, strcomp, strpos and string manipulation functions.
Photo by Nathaniel Shuman on Unsplash

Problems

Solutions

Examples

Sample Code

Wrong

Right

Detection

Automated detection is not easy. A warning can be issued if too many string functions are used.

Relations

Tags

Code Smell 05 — Comment Abusers

To be continued...

How to Find the Stinky Parts of Your Code (Part II)

How to Find the Stinky Parts of Your Code (Part III)

How to Find the Stinky Parts of Your Code (Part IV)

How to Find the Stinky Parts of Your Code (Part V)

… and many more to come.
Smells are certain structures in the code that suggest (sometimes they scream for) the possibility of refactoring.
Martin Fowler
Part of the objective of this series of articles is to generate spaces for debate and discussion on software design.
We look forward to comments and suggestions on this article.