SOLID Principles
A set of principles to design or write classes.
Single Responsibility Principle
A class should have one, and only one, reason to change.
Open - Closed Principle
You should be able to extend a classes behavior, without modifying it.
Liskov Substitution Principle
Derived classes must be substitutable for their base classes.
Interface Segregation Principle
Make fine grained interfaces that are client specific.
Dependency Inversion Principle
Depend on abstractions, not on concretions.