SOLID Design Principles
The foundation of maintainable and scalable object-oriented software.
S - Single Responsibility Principle
A class should have one, and only one, reason to change.
O - Open/Closed Principle
Software entities should be open for extension, but closed for modification.
L - Liskov Substitution Principle
Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.
I - Interface Segregation Principle
Many client-specific interfaces are better than one general-purpose interface.
D - Dependency Inversion Principle
Depend upon abstractions, [not] concretions.