Zpět na domů

LOTIS PHP framework: objekty místo DOM a asynchronních volání

Analýza architektury frameworku LOTIS, postaveného za 10 let vývoje. Popsán princip CMA (Construct-Metadata-Assembly), který nahrazuje DOM a asynchronní volání objektovým modelem. Uvedeny příklady kódu z reálné aplikace a výhody přístupu pro business úkoly.

LOTIS: PHP bez DOM a Promise — jak to funguje?
Advertisement 728x90

LOTIS: PHP framework, který nahrazuje DOM a asynchronní volání objekty

Po deseti letech vývoje dospěl autor frameworku LOTIS k radikálnímu rozhodnutí: vzdát se tagů a asynchronních požadavků ve prospěch objektově orientovaného přístupu. Výsledkem je vytváření webových aplikací jako nedělitelného celku bez rozdělení na klient a server. Namísto práce s prvky DOM pracují vývojáři s objekty aplikační domény, což výrazně zkracuje čas potřebný k realizaci obchodní logiky.

Koncept CMA: od objektů k metadatům

Základem architektury LOTIS je princip CMA (Construct-Metadata-Assembly). Aplikace se staví výhradně na objektech implementujících základní rozhraní Construct. Každý objekt generuje metadata, která se pak používají k různým účelům: stavbě rozhraní, realizaci reaktivity nebo tvorbě API. Klíčovým komponentem je třída Space odpovědná za sestavení webové aplikace z objektů.

Na rozdíl od tradičních frameworků, kde je rozbalení a logika odděleny, LOTIS umožňuje:

Google AdInline article slot
  • Popisovat UI prostřednictvím PHP objektů
  • Používat stejné proměnné na klientovi i serveru
  • Vyhnout se manuálnímu zpracování asynchronních operací
  • Dynamicky měnit hierarchii komponent dědičností

Minimální funkční příklad demonstruje podstatu přístupu:

$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);

Zde LTS::Div() vytváří objekt, nikoli HTML tag. Převod do DOM probíhá až při předání objektu do Space. To poskytuje svobodu manipulace se strukturou aplikace jako v klasických desktopových frameworkách.

Reálný případ: účetní systém „Trekker“

Podívejme se na fragment kódu z funkční aplikace pro evidenci zboží a výpočet mezd. LOTIS umožňuje popsat složitou logiku kompaktně bez šablon a AJAX volání:

Google AdInline article slot
$maindiv = LTS::DataView();
$maindiv->bindtodb($kassa, [
    'head' => ['sel' => '', 'date' => 'Date'],
    'inputs' => [
        ['name' => 'id',  'type' => 'hidden'],
        ['name' => 'date', 'type' => 'date', 'caption' => 'Date'],
        ['name' => 'save', 'caption' => 'Write', 'type' => 'button'],
        ['name' => 'close', 'caption' => 'Cancel', 'type' => 'button']
    ],
    'cells' => ['save, close', 'date']
]);

$subtable = $maindiv->subtable('kassasubtable', $kassatable, [
    'head' => [
        'sel' => '',
        'name' => 'Employee',
        'pay' => 'Received',
        'del' => ''
    ],
    'inputs' => [
        ['name' => 'user', 'type' => 'table', 'dbtable' => $users, 'caption' => 'Employee'],
        ['name' => 'message', 'caption' => 'Onwartość'],
        ['name' => 'pay', 'type' => 'numeric', 'caption' => 'Issued']
    ]
]);

$maindiv->onsave(function ($args, $result) {
    global $money, $users;
    $paytable = $args['subtables']['kassasubtable'];
    $stock = LTS::Stock($money);
    $stock->collector($users, 'user', ['total' => 'pay']);
    $stock->update(['doc' => $result['data']['id']], $paytable);
    return $result;
});

Všimněte si zpracování uložení dokumentu: obchodní logika (naúčtování mzdy) je popsána v jednom bloku bez rozdělení na klientskou a serverovou část. JavaScript háčky jsou integrovány metodami jako table->out(), ale jejich psaní nevyžaduje znalost asynchronních vzorů.

Výhody pro vývojáře

Přístup LOTIS řeší tři klíčové problémy tradičního webového vývoje:

  • Odstranění duplicity logiky – kontroly a transformace dat se popisují jednou v objektech, ne v oddělených JS a PHP modulech
  • Snížení složitosti architektury – absence potřeby navrhovat API a zpracovávat stavy načítání
  • Jednotná datová model – změny v objektech se automaticky synchronizují mezi klientem a serverem prostřednictvím metadat

Framework je obzvláště cenný pro úkoly s přísnými termíny: typové operace (formuláře, tabulky, validace) se realizují v 3–5 řádcích kódu místo desítek. Přitom zůstává flexibilita – prostřednictvím JavaScript háčků lze přizpůsobit jakékoli chování, jako v příkladu s formátováním data:

Google AdInline article slot
$maindiv->table->out(<<<JS
function (row, obj) {
    row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);

Co je důležité

  • LOTIS odstraňuje hranici klient-server díky objektovému modelu generujícímu metadata
  • Vývoj probíhá v PHP bez šablon, ale s možností vestavění JS logiky
  • Framework šetří čas na rutinních operacích: AJAX, validace, synchronizace stavů
  • Architektura CMA umožňuje používat stejné objekty pro různé účely (UI, API, offline režim)
  • Port na Node.js otevírá cestu pro PWA a lokální aplikace se synchronizací

Aktuální implementace frameworku se zaměřuje na obchodní aplikace, kde je klíčová rychlost vývoje. Další velká verze přidá podporu TypeScriptu a zlepší integraci s moderními nástroji pro build. Pro vývojáře unavené nekonečnými obálkami nad DOM a řetězci Promise nabízí LOTIS návrat k jednoduchosti OOP bez ztráty funkcionality webové platformy.

— Editorial Team

Advertisement 728x90

Číst dál