Code Smell 200 - Poltergeist

Maxi Contieri - Mar 8 '23 - - Dev Community

An object that appears and disappears mysteriously

TL;DR: Add the necessary indirection layers, but no more.

Problems

  • Accidental complexity

  • Readability

  • YAGNI violation

Solutions

  1. Remove the intermediate object

Context

A poltergeist (or gypsy wagon) is a short-lived object used to perform initialization or to invoke methods in another, more permanent class.

An object is responsible for many small tasks, resulting in excessive coupling and a lack of cohesion in the code.

Sample Code

Wrong

public class Driver
{
    private Car car;

    public Driver(Car car)
    {
        this.car = car;
    }

    public void DriveCar()
    {
        car.driveCar();
    }
}


Car porsche = new Car();
Driver homer = new Driver(porsche);
homer.DriveCar();
Enter fullscreen mode Exit fullscreen mode

Right

Car porsche = new Car();

porsche.driveCar();
// We don't need the driver
Enter fullscreen mode Exit fullscreen mode

Detection

[X] Manual

This is a design smell.

Tags

  • Complexity

Conclusion

Don't add accidental complexity to the essential complexity we already have.

Remove middleman objects if they are not needed.

Relations

More Info

Disclaimer

Code Smells are my opinion.

Credits

Photo by Lan Gao on Unsplash


The art of programming is the art of organizing complexity, of mastering multitude and avoiding its bastard chaos as effectively as possible.

E. W. Dijkstra


This article is part of the CodeSmell Series.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .