- S ingle Responsibility
- O pen/Closed Principle
- L iskov Substitution Principle
- I nterface segregation Principle
-
D ependency Inversion Principle
- Avoid Side Effects
- Prefer composition to inheritance
- Avoid mutable state
- Use the type system to avoid errors
- Avoid if/switch statements except to create polymorphic objects