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.