• rozhraní - odděluje specifikaci od implementace
  • Komponenta A nabízí rozhraní (nějakou funkcionalitu)
  • Komponenta B potřebuje rozhraní

Implementace rozhraní

Komponenty (třídy) mohu mezi sebou propojovat

  • manuálně ve zdrojovém kódu
  • pomocí IoC (= Inversion of Control)
    • řeší problém toho, že si třídy samy vytváří/načítají závislosti a to pak je problém při měnění závislostí či odděleném testování
    • “otočení” kontroly tak, že místo toho komponentám dané závislosti dodáme zvenčí (prostřednictvím konstruktoru či nějaké speciální metody)
    • protože jsou závislosti dodány zvenku, tak je můžeme snadno měnit a neovlivníme tím samotnou třídu
    • je to výhoda i u testování, kdy závislosti můžeme nahradit tzv. mocky a simulovat jejich chování
    • s tímto je hodně spojené také DI = dependency injection
      • závislosti jsou injektovány přímo do objektu
      • constructor-based a setter-based