refactor solution & tests to fit SOLID