SOLID Principles
(S) Single Responsibility Principle
A class should have only one reason to change
(O) Open and Closed Principle
Classes should be open for extension but closed for modification
(L) Liskov Substitution Principle
Derived classes should be substitutable for their base classes
(I) Interface Segregation Principle
Client’s should not be forced to implement an interface they don’t use
(D) Dependency Inversion Principle
Program to an interface not an implementation