oop and di refactoring - part 1
oop and di refactoring - part 2