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!
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í:
- Relace klient-server se vytvářejí na serveru 4D vždy, když se nový uživatel připojí ke vzdálenému serveru 4D.
- 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.
- Relace REST, vytvořené serverem REST pro zpracování požadavků REST uživatele.
- 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.