Sobes.tech
Senior

Porovnejte návrhové vzory, které jste používali v jiných programovacích jazycích, s těmi, které se používají v TypeScriptu.

sobes.tech AI

Odpověď od AI

Vývoj frontend na TypeScriptu často vychází z klasických vzorů návrhu a přizpůsobuje je specifikům JavaScriptu a statické typizaci. Rozdíly jsou především způsobeny dynamikou JS a možnostmi TS.

Hlavní vzory, které se často v TypeScriptu vyskytují:

  • Singleton: Implementuje se přes statickou vlastnost nebo funkci, která vrací jediný instance třídy. Na rozdíl od jazyků s přísnější kontrolou přístupu je v JS/TS spíše dohoda.
  • Factory Method / Abstract Factory: Používají se k vytváření objektů. V TS lze použít rozhraní k definování smluv továren a tříd, což zvyšuje bezpečnost typů ve srovnání s čistým JS.
  • Observer: Často se používá pro odběry a oznámení, například v reaktivních knihovnách nebo při práci s událostmi. Typování odběratelů a dat událostí zvyšuje spolehlivost.
  • Strategy: Umožňuje inkapsulaci různých algoritmů a jejich výběr při běhu. TypeScript pomáhá zajistit, že všechny strategie implementují stejnou rozhraní.

Porovnání s jinými jazyky (C# / Java jako příklad):

Vzor TypeScript (Specifika) Jiné jazyky (C# / Java) (Specifika)
Singleton Závisí na dohodě, nemá přísné modifikátory přístupu. Často se realizuje pomocí private konstruktoru a statické metody.
Factory Použití rozhraní pro smlouvy. Silná kontrola typů, abstract třídy.
Observer Široce používané v reaktivním programování. Často s použitím tříd, event / posluchačů.
Strategy Použití rozhraní pro definici chování. Realizace přes rozhraní nebo abstraktní třídy.
Decorator Nativní podpora přes syntaxi @. Realizace přes dědičnost nebo obalování.
Adapter Dostupnost vyšších funkcí usnadňuje implementaci. Obvykle realizováno přes dědičnost nebo kompozici.

Rozdíly:

  • Dynamická povaha JS: Některé vzory, spojené s introspekcí nebo dynamickým vytvářením objektů, mohou být jednodušší v čistém JS, ale TypeScript přidává úroveň bezpečnosti.
  • Typování: Nejvýznamnější rozdíl. TypeScript umožňuje používat rozhraní, generika a statickou analýzu pro realizaci vzorů s větší spolehlivostí. Například vzor Decorator má nativní podporu v TypeScriptu.
  • Asynchronní operace: Vzory spojené s asynchronností (například Promises, async/await) jsou v frontendovém vývoji důležitější a TypeScript je dobře podporuje.

Příklad implementace Singleton v TypeScriptu:

class Singleton {
  private static instance: Singleton;
  private constructor() {
    // Inicializace
  }
  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
  // Metody třídy
}

Obecně platí, že vzory v TypeScriptu odrážejí klasické principy, ale jsou přizpůsobeny ekosystému JavaScriptu, aktivně využívají možnosti statické typové kontroly ke zlepšení kódu a prevenci chyb.