Let's play with some design patterns and TDD