In software engineering, SOLID is a mnemonic acronym for five design principles intended to make software designs more understandable, flexible, and maintainable.
A class should have one and only one reason to change, meaning that a class should have only one job.
Objects or entities should be open for extension but closed for modification.
Derived classes must be substitutable for their base classes.
Many client-specific interfaces are better than one general-purpose interface.
Entities must depend on abstractions not on concretions.