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