Support this and all my katas via Patreon
Can you spot any code smells in this code? I'll give you a clue - a spot of Pol(l)ymorphism should improve matters!
Refactor this code, take small steps, run the tests often. See how small and beautiful and polymorphic you can make it.
I made a video explaining this kata, and videos with worked solutions:
There is also a Guided Learning Hour using this exercise: Everyday Design Improvements in OO Code
This code is heavily inspired by one of the examples in Martin Fowler's book "Refactoring". It's a classic, and if it's not on your bookshelf already I suggest you treat yourself to a copy!