SOLID
- Single responsibility: a class should have 1 job
- Open-closed principle: Open for extension but closed for modification
- Liskov Substitution Principle: every subclass of a class should be able to substitute for its parent ^2c2ce6
- Interface Segregation Principle: A client should never be fored to implement an interface that it doesn't use
- Dependency Inversion Principle:
- High level module and low level modules should interact through abstraction rather than depending on each other.
- For example A talks to B interface rather than B directly