oop and di refactoring - part 3