Object-Oriented Design
SRP
Single Responsibility Principle
There should never be more than one reason for a class to change.
OCP
Open Closed Principle
Software entities (like classes, modules and functions) should be open for extension but closed for modifications.
LSP
Liskov Substitution Principle
Inheritance should ensure that any property proved about supertype objects also holds for subtype objects.
ISP
Interface Segregation Principle
Clients should not be forced to depend upon interfaces that they don't use.
DIP
Dependency Injection Principle
High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions.