Refactoring on generators

Create Reporter interface to split responsibilities and decouple some code.
I want to make a new reporter and decided to refactor some code before.