# LOTIS: Framework PHP, który zastępuje DOM i asynchroniczne wywołania obiektami
Za dziesięć lat rozwoju autor frameworka LOTIS doszedł do radykalnego rozwiązania: zrezygnować z tagów i asynchronicznych zapytań na rzecz obiektowo-zorientowanego podejścia. Rezultat — tworzenie aplikacji internetowych jako jednolitej całości, bez podziału na klienta i serwer. Zamiast pracy z elementami DOM programiści operują obiektami dziedziny biznesowej, co radykalnie skraca czas na implementację logiki biznesowej.
Koncepcja CMA: od obiektów do metadanych
Podstawą architektury LOTIS jest zasada CMA (Construct-Metadata-Assembly). Aplikacja jest budowana wyłącznie na obiektach implementujących podstawowy interfejs Construct. Każdy obiekt generuje metadane, które są następnie używane do różnych celów: budowania interfejsu, realizacji reaktywności lub tworzenia API. Kluczowy komponent — klasa Space, odpowiedzialna za składanie aplikacji internetowej z obiektów.
W odróżnieniu od tradycyjnych frameworków, gdzie szablon i logika są rozdzielone, LOTIS pozwala:
- Opisywać UI za pomocą obiektów PHP
- Używać tych samych zmiennych po stronie klienta i serwera
- Unikać ręcznego przetwarzania operacji asynchronicznych
- Dynamicznie zmieniać hierarchię komponentów poprzez dziedziczenie
Minimalny działający przykład demonstruje istotę podejścia:
$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);
Tutaj LTS::Div() tworzy obiekt, a nie znacznik HTML. Przekształcenie w DOM następuje dopiero przy przekazaniu obiektu do Space. Daje to swobodę manipulacji strukturą aplikacji jak w klasycznych frameworkach desktopowych.
Rzeczywisty przypadek: system księgowy „Trekker”
Rozważmy fragment kodu z działającej aplikacji do ewidencji towarów i obliczania wynagrodzeń. LOTIS pozwala opisać skomplikowaną logikę kompaktowo, bez szablonów i wywołań AJAX:
$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;
});
Zwróć uwagę na przetwarzanie zapisu dokumentu: logika biznesowa (naliczanie wynagrodzeń) jest opisana w jednym bloku bez podziału na części kliencką i serwerową. Haki JavaScript są zintegrowane poprzez metody takie jak table->out(), ale ich pisanie nie wymaga znajomości wzorców asynchronicznych.
Zalety dla programistów
Podejście LOTIS rozwiązuje trzy kluczowe problemy tradycyjnej development internetowej:
- Eliminacja duplikowania logiki — weryfikacje i przekształcenia danych są opisane raz w obiektach, a nie w oddzielnych modułach JS i PHP
- Zmniejszenie złożoności architektury — brak potrzeby projektowania API i obsługi stanów ładowania
- Jednolity model danych — zmiany w obiektach są automatycznie synchronizowane między klientem a serwerem poprzez metadane
Framework jest szczególnie cenny w zadaniach z sztywnymi terminami: typowe operacje (formularze, tabele, walidacja) realizowane są w 3-5 liniach kodu zamiast dziesiątek. Jednocześnie zachowuje elastyczność — poprzez haki JavaScript można dostosować dowolne zachowanie, jak w przykładzie formatowania daty:
$maindiv->table->out(<<<JS
function (row, obj) {
row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);
Co ważne
- LOTIS eliminuje granicę klient-serwer dzięki modelowi obiektowemu generującemu metadane
- Rozwój odbywa się w PHP bez szablonów, ale z możliwością wbudowywania logiki JS
- Framework oszczędza czas na rutynowych operacjach: AJAX, walidacja, synchronizacja stanów
- Architektura CMA pozwala używać tych samych obiektów do różnych celów (UI, API, tryb offline)
- Port na Node.js otwiera drogę dla PWA i aplikacji lokalnych z synchronizacją
Aktualna implementacja frameworka skupia się na aplikacjach biznesowych, gdzie kluczowa jest szybkość development. Następna wersja główna doda wsparcie dla TypeScript i poprawi integrację z nowoczesnymi narzędziami budowania. Dla programistów zmęczonych nieskończonymi wrapperami nad DOM i łańcuchami Promise, LOTIS oferuje powrót do prostoty OOP bez utraty funkcjonalności platformy webowej.
— Editorial Team
Brak komentarzy.