Sobes.tech
Senior

Porovnajte vzory návrhu, ktoré ste použili v iných programovacích jazykoch, s tými, ktoré sa používajú v TypeScript.

sobes.tech AI

Odpoveď od AI

Vývoj frontend na TypeScript často vychádza z klasických vzorov návrhu a prispôsobuje ich špecifikám JavaScriptu a statickej typizácie. Rozdiely sú predovšetkým spôsobené dynamikou JS a možnosťami TS.

Hlavné vzory, ktoré sa často v TypeScript-e vyskytujú:

  • Singleton: Implementuje sa cez statickú vlastnosť alebo funkciu, ktorá vracia jediný príklad triedy. Na rozdiel od jazykov s prísnejšou kontrolou prístupu je v JS/TS toto skôr dohoda.
  • Factory Method / Abstract Factory: Používajú sa na vytváranie objektov. V TS možno použiť rozhrania na definovanie zmlúv fabrík a tried, čo zvyšuje typovú bezpečnosť v porovnaní s čistým JS.
  • Observer: Často sa používa na odber a oznámenia, napríklad v reaktívnych knižniciach alebo pri práci s udalosťami. Typovanie odberateľov a dát udalostí zvyšuje spoľahlivosť.
  • Strategy: Umožňuje inkapsuláciu rôznych algoritmov a ich výber počas behu. TypeScript pomáha zabezpečiť, že všetky stratégie implementujú rovnaké rozhranie.

Porovnanie s inými jazykmi (C# / Java ako príklad):

Vzor TypeScript (Špecifiká) Iné jazyky (C# / Java) (Špecifiká)
Singleton Závisí od dohody, nemá prísne modifikátory prístupu. Často sa realizuje pomocou private konštruktora a statickej metódy.
Factory Použitie rozhraní na zmluvy. Silná typová kontrola, abstract triedy.
Observer Široko používané v reaktívnom programovaní. Často s použitím tried, event / poslucháčov.
Strategy Použitie rozhraní na definovanie správania. Realizácia pomocou rozhraní alebo abstraktných tried.
Decorator Nativná podpora cez syntax @. Realizácia cez dedičstvo alebo obalovanie.
Adapter Dostupnosť funkcií vyššieho radu uľahčuje implementáciu. Obvykle realizované pomocou dedičstva alebo kompozície.

Rozdiely:

  • Dynamická povaha JS: Niektoré vzory, spojené s introspekciou alebo dynamickým vytváraním objektov, môžu byť jednoduchšie v čistom JS, ale TypeScript pridáva úroveň bezpečnosti.
  • Typovanie: Najvýznamnejšia odlišnosť. TypeScript umožňuje používanie rozhraní, generík a statickej analýzy na realizáciu vzorov s väčšou spoľahlivosťou. Napríklad, vzor Decorator má natívnu podporu v TypeScript.
  • Asynchrónnosť: Vzory spojené s asynchrónnosťou (napríklad Promises, async/await) sú v frontend vývoji centrálne a TypeScript ich dobre podporuje.

Príklad implementácie Singleton v TypeScript:

class Singleton {
  private static instance: Singleton;
  private constructor() {
    // Inicializácia
  }
  public static getInstance(): Singleton {
    if (!Singleton.instance) {
      Singleton.instance = new Singleton();
    }
    return Singleton.instance;
  }
  // Metódy triedy
}

Všeobecne platí, že vzory v TypeScript odrážajú klasické princípy, ale sú prispôsobené ekosystému JavaScriptu, aktívne využívajú možnosti statickej typizácie na zlepšenie kódu a prevenciu chýb.