SOLID principles are five design principles which can be used to design components which are loosely coupled and testable. They are:
- Single Responsibility Principle – A component must contain only one functionality to perform for itself.
- Open Closed Principle – Components must be open for extension and closed for modification
- Liskov Substitution Principle – Derived classes must behave in the same way as how their base classes behave. They must be fully substitutable in place of their base classes.
- Interface Segregation Principle – Interfaces must contain only what the client requires.
- Dependency Inversion Principle – Components must not be responsible for the lifetime management of their dependencies, instead the components must be dependent on the abstractions of their dependencies.