An overview of the main Object Oriented Design principles, on the limits of direct use of constructors for object creation, and how to solve this problem with classical factory patterns or dependency injection frameworks, with an example of how dependency injection can help implement the Unit of Work pattern for a clean architecture.