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:
- 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í:
$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:
$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
Zatím žádné komentáře.