Have you encountered classes without behavior? Classes are their behavior.
TL;DR: Remove all empty classes.
Problems
Bijection Fault
Namespace Polluting
Classes used as DTOs
Classes used as global references
Solutions
Remove the classes and replace them with objects instead.
If your classes are Anemic Exceptions, remove them.
Context
Many developers still think classes are data repositories.
They couple different behavior concept with returning different data.
Sample Code
Wrong
class ShopItem {
code() { }
description() { }
}
class BookItem extends ShopItem {
code() { return 'book' }
description() { return 'some book'}
}
// concrete Class has no real behavior, just return different 'data'
Right
class ShopItem {
constructor(code, description){
//validate code and description
this._code = code;
this._description = description;
}
code() { return this._code }
description() { return this._description }
//Add more functions to avoid anemic classes
//getters are also code smells, so we need to iterate it
}
bookItem = new ShopItem('book', 'some book);
//create more items
Detection
[X] Automatic
Several linters warn us of empty classes.
We can also make our own scripts using metaprogramming.
Tags
- Behavior
Conclusion
Classes are what they do, their behavior.
Empty classes do nothing.
Relations
Code Smell 26 - Exceptions Polluting
Maxi Contieri ・ Nov 16 '20
Code Smell 60 - Global Classes
Maxi Contieri ・ Jan 31 '21
Code Smell 01 - Anemic Models
Maxi Contieri ・ Oct 20 '20
More Info
-Refactoring 004 - Remove Unhandled Exceptions
Credits
Photo by Kelly Sikkema on Unsplash
An error arises from treating object variables (instance variables) as if they were data attributes and then creating your hierarchy based on shared attributes. Always create hierarchies based on shared behaviors, side.
David West
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.