These principles can be applied on a code level or an architectural level.

Single Responsibility Principle

Open-Closed Principle

Liskov’s Substitution Principle

Interface Segregation Principle

Dependency Inversion