LOTIS: PHP-Framework, das DOM und asynchrone Aufrufe durch Objekte ersetzt
Nach zehn Jahren Entwicklung hat der Autor des LOTIS-Frameworks eine radikale Lösung gefunden: Abschied von Tags und asynchronen Anfragen zugunsten eines objektorientierten Ansatzes. Das Ergebnis? Web-Apps als einheitliches Ganzes erstellen, ohne Client und Server zu trennen. Entwickler arbeiten mit Domänenobjekten statt mit DOM-Elementen und sparen dadurch erheblich Zeit bei der Implementierung der Geschäftslogik.
CMA-Konzept: Von Objekten zu Metadaten
Das Fundament der LOTIS-Architektur ist das CMA-Prinzip (Construct-Metadata-Assembly). Apps werden vollständig aus Objekten aufgebaut, die die Basisschnittstelle Construct implementieren. Jedes Objekt erzeugt Metadaten, die zum Aufbau von Interfaces dienen, Reaktivität ermöglichen oder APIs erstellen. Die zentrale Komponente ist die Space-Klasse, die die Web-App aus diesen Objekten zusammenstellt.
Im Gegensatz zu traditionellen Frameworks, die Markup von Logik trennen, ermöglicht LOTIS Folgendes:
- UI über PHP-Objekte zu beschreiben
- Dieselben Variablen auf Client und Server zu verwenden
- Manuelles Handling asynchroner Operationen zu überspringen
- Komponentenhierarchien dynamisch über Vererbung zu verändern
Ein minimales, funktionsfähiges Beispiel zeigt das Wesentliche:
$div = LTS::Div()->capt("Hello from LOTIS!");
LTS::Space()->build($div);
Hier erzeugt LTS::Div() ein Objekt, keinen HTML-Tag. Die DOM-Konvertierung erfolgt erst, wenn das Objekt an Space übergeben wird. Das erlaubt es, die App-Struktur mit der Freiheit klassischer Desktop-Frameworks zu manipulieren.
Praxisbeispiel: Buchhaltungssystem „Tracker“
Betrachten Sie diesen Code-Ausschnitt aus einer funktionsfähigen App für Lagerbestandsverfolgung und Lohnabrechnungen. LOTIS beschreibt komplexe Logik kompakt, ohne Templates oder AJAX-Aufrufe:
$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;
});
Beachten Sie die Behandlung des Dokumentspeicherns: Geschäftslogik (wie Lohnansammlung) wird in einem Block erfasst, ohne Client-Server-Trennung. JavaScript-Hooks werden über Methoden wie table->out() integriert, ohne dass Expertise in asynchronen Mustern erforderlich ist.
Vorteile für Entwickler
LOTIS löst drei Kernprobleme der traditionellen Webentwicklung:
- Logikduplikation eliminieren – Datenprüfungen und -Transformationen werden einmal in Objekten definiert, nicht über JS- und PHP-Module verteilt
- Architekturkomplexität reduzieren – kein Bedarf, APIs zu entwerfen oder Ladezustände zu managen
- Einheitliches Datenmodell – Objektänderungen synchronisieren sich automatisch zwischen Client und Server über Metadaten
Besonders wertvoll für Projekte mit knappen Fristen: Standardoperationen (Formulare, Tabellen, Validierung) benötigen 3–5 Zeilen statt Dutzender. Die Flexibilität bleibt erhalten – JS-Hooks erlauben Anpassungen beliebiger Art, wie diese Datumsformatierung:
$maindiv->table->out(<<<JS
function (row, obj) {
row.find('td.Column_date').text(obj.date.substr(0, 10));
}
JS);
Wichtige Punkte
- LOTIS verwischt die Grenze zwischen Client und Server mit einem Objektmodell, das Metadaten erzeugt
- Entwicklung nutzt reines PHP, keine Templates, aber JS-Logik kann eingebettet werden
- Spart Zeit bei Routineaufgaben: AJAX, Validierung, Zustandssynchronisation
- CMA lässt dieselben Objekte für UI, API oder Offline-Modus dienen
- Node.js-Port ermöglicht PWAs und lokale Apps mit Synchronisation
Die aktuelle Implementierung richtet sich an Business-Apps, bei denen Geschwindigkeit entscheidend ist. Die nächste große Version fügt TypeScript-Unterstützung und bessere Integration mit modernen Build-Tools hinzu. Für Entwickler, die die Nase voll haben von DOM-Wrappers und Promise-Ketten, bringt LOTIS die OOP-Einfachheit zurück – ohne auf Web-Fähigkeiten zu verzichten.
— Editorial Team
Noch keine Kommentare.