Představení relací Singletons

Automaticky přeloženo z Deepl

Singletony jsou jednou z nejvýznamnějších funkcí aplikace 4D 20 R5. Dříve mohli vývojáři využívat dva typy singletonů:

  • singleton procesu, který je jedinečný pro každý proces, ale liší se napříč procesy,
  • a sdílený singleton, který je jedinečný pro celou aplikaci.

Ve verzi 4D 20 R7 uvádíme nový typ singletonu: singleton relace!

Singletony relací HDI

Co jsou singletony relací?

Singletony relace jsou sdílené v rámci celé relace, ale liší se mezi jednotlivými relacemi. Jsou užitečné zejména ve webových prostředích, kde požadavky jednoho uživatele zpracovávají pokaždé jiné procesy. V prostředích klient-server zjednodušují singletony relací vytváření jednoho singletonu pro každého uživatele na serveru, čímž odpadají starosti o to, který proces jej používá.

Relace ve 4D

Ve 4D existují 4 typy relací:

  1. Relace klient-server se vytvářejí na serveru 4D vždy, když se nový uživatel připojí ke vzdálenému serveru 4D.
  2. Webové relace, které vytváří webový server pro zpracování požadavků HTTP uživatele, jsou k dispozici pouze v případě, že byly aktivovány škálovatelné relace.
  3. Relace REST, vytvořené serverem REST pro zpracování požadavků REST uživatele.
  4. Relace uložených procedur je relace serveru 4D, která zpracovává provádění všech uložených procedur.

Pátý okrajový případ nastává, když žádná relace neexistuje. K tomu dochází pouze v případě, že spustíte 4D Mono a spustíte kód mimo jakýkoli webový/REST požadavek.

Klasický případ použití: inventura položek

Singletony relací září v případech užití, jako jsou nákupní košíky, seznam prvků: inventář položek. Uvažujme například inventář položek, kde je inventář každého uživatele jedinečný:

//class ItemInventory
    property itemList : Collection:=[]

session singleton Class constructor()

shared function addItem($item:object)
    This.itemList.push($item)

Díky definici třídy ItemInventory jako singletonu relace má každá relace– a tedy každý uživatel– svůj vlastní ItemInventory. Přístup k uživatelskému ItemInventory je stejně jednoduchý jako u jakéhokoli jiného typu singletonu:

$myItemInventory:=cs.ItemInventory.me

To vrátí ItemInventory aktuální relace odkudkoli z aplikace. Úprava tohoto ItemInventory, například přidáním nebo odebráním položek, změní pouze inventářaktuální relace – atedy aktuálního uživatele.

Klíčové úvahy pro singletony relací

Sdílené třídy:

Nejdůležitější je pochopit, že singletony relace jsou sdílené třídy, protože je používá více procesů.

Sdílené relace:

V neposlední řadě: Pokud opakovaně použijete stejný soubor cookie pro webové připojení a připojení REST, budete přistupovat ke stejné relaci (která se přepne z webové relace na relaci REST) a tím i ke stejnému singletonu relace.

Závěr

Souhrnně řečeno, singletony relací poskytují jednoduchý a efektivní způsob správy dat specifických pro uživatele napříč různými relacemi ve 4D. Tato nová funkce nabízí snadné a škálovatelné řešení pro vytváření organizovaných aplikací, které efektivně spravují data napříč relacemi.

Pokud máte nějaké dotazy nebo potřebujete pomoc, neváhejte se zapojit do diskuse na fóru 4D.

Nicolas Brachfogel
• Product Owner & Senior Developer • Nicolas Brachfogel nastoupil do 4D v roce 2017 jako senior vývojář (4D server a sítě). Jako Product Owner, který řídí vydání Apple Silicon, má na starosti psaní uživatelských příběhů a jejich převod do funkčních specifikací a také zajišťuje, aby implementace funkcí vyhovovaly potřebám zákazníků. Nicolas, absolvent Institut Supérieur d'Informatique Appliquée (INSIA), začal svou kariéru jako softwarový vývojář v roce 2001. Po několika letech kódování v Javě a C++ se specializoval na vývoj klient-server pro společnosti zabývající se videohrami. Jako serverový vývojář/architekt úspěšně pracoval na serverových architekturách mnoha her (Dofus Arena, Drakerz, Trivial Pursuit Go!).