Principles
1) SOLID
- Single Responsibility - This means that a class must have only one responsibility
- Open/Closed - Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification
- Liskov Substitution Principle (LSP) - Objects of a superclass should be replaceable with objects of its subclasses without affecting the correctness of the program.
- Interface Segregation Principle (ISP) - No client should be forced to depend on interfaces they don’t use.
- Dependency Inversion Principle (DIP) - High-level modules should not depend on low-level modules; both should depend on abstractions.
2) DRY - Don’t Repeat Yourself 3) YAGNI - You Aren’t Gonna Need It 4) KISS - Keep it Simple, Stupid