Zurück zur Startseite

LOTIS PHP-Framework: Objekte statt DOM und asynchroner Aufrufe

Analyse der LOTIS-Framework-Architektur, aufgebaut über 10 Jahre Entwicklung. Beschreibt das CMA-Prinzip (Construct-Metadata-Assembly), das DOM und asynchrone Aufrufe durch ein Objektmodell ersetzt. Code-Beispiele aus einer echten Anwendung und Vorteile des Ansatzes für Business-Aufgaben.

LOTIS: PHP ohne DOM und Promise — wie funktioniert es?
Advertisement 728x90

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:

Google AdInline article slot
  • 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:

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;
});

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:

Google AdInline article slot
$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

Advertisement 728x90

Weiterlesen