Principles to desing better software, less couplig
- Single Responsibility: every class should have a single responsibility/purpose.
- Open/Closed: "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification" which means you should be able to extend a class behavior, without modifying it.
- Liskov’s Substitution: "Derived or child classes must be substitutable for their base or parent classes". any class that is the child of a parent class, should be usable in place of its parent, with the same interface.
- Interface Segregation: "do not force any client to implement an interface which is irrelevant to them". "Keep It Simple" / KISS
- Dependency Inversion Principle: High-level modules/classes should not depend on low-level modules/classes. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon abstractions.