• 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

Části interface

  • různé služby (services) v rámci určitého systému si spolu potřebují povídat
  • existuje několik úrovní/částí komunikace mezi services pomocí interface:
    • data
      • datový model, který interface používá (např. pro inputy/outputy, reprezentace zdrojů apod.)
    • funkce
      • zajišťují jednotlivé operace interface a definují vstupní a výstupní data
      • každá operace může mít predispozice (které musejí být splněny před spuštěním) a následky (ovlivnění stavu aplikace)
    • procesy
      • popisy, jak jednotlivé funkce/operace používat (taková dokumentace k interface)
      • definuje validní stavy aplikace a jak se do/z nich dostat
      • operace/funkce reprezentuje změnu stavu aplikace
        • k této změně mohou být potřeba splněny nějaké podmínky (predispozice) a pak ta změna má nějaké určité efekty
    • technické detaily
      • bezpečnost, SLA dohoda
      • IP adresy, porty, protokoly apod.