Single Responsibility Principle – the methods and classes should focus on doing one thing and doing it well
Open Closed Principle – extend the classes instead of modifying them – Open for extension, closed for modification. Imagine you want to add a basement to your house. You don’t want to change the code that is already in production.
Liskvov Substitution Principle – Derived classes can stand in before base classes – Code against an interface.
Interface Segregation Principle – Make fined grained interfaces client specific –
Dependency Inversion – Depend on abstractions, not concrete implementations