Auf dieser Seite
- Wie dbxapp weiterentwickelt werden soll
- 1. Auftrag
- 2. Nicht verhandelbare Vorgaben
- 3. Architektur-Ziel
- 4. Komponenten-Stecknorm
- 5. Modulcode neuer Stil
- 6. Umgang mit bestehenden Modulen
- 7. Form- und Report-Strategie
- 8. Hooks und Events
- 9. Workflow- und Process-Arbeit
- 10. Persistenter State
- 11. Trace-Pflicht
- 12. Umsetzungsreihenfolge für Codex
- 13. Erste konkrete Arbeitspakete
- 14. Was Codex vermeiden soll
- 15. Entscheidungsfragen vor größeren Umbauten
- 16. Zielzustand
- 17. Merksatz für Codex
Wie dbxapp weiterentwickelt werden soll
Dieser Leitfaden beschreibt, wie Codex an dbxapp arbeiten soll: kompatibel, vorsichtig, zielgerichtet und immer am LEGO-RAD-Konzept ausgerichtet. dbxapp wird nicht neu erfunden, sondern schrittweise auf eine klare Baustein-Runtime gehoben.
1. Auftrag
Codex soll dbxapp zu einer Borland-, Concept16- und DataFlex-inspirierten PHP-Web-RAD-Runtime weiterentwickeln. Das Ziel ist eine klare, schnelle, sichere und vorhersehbare Runtime für Business-Anwendungen.
Die Entwicklung folgt dem LEGO-Prinzip:
Wenige genormte Anschluesse. Viele kombinierbare Bausteine. Keine versteckte Magie im Kern. Wow-Effekt im UI. Alles tracebar. Alles erweiterbar ohne Kernel-Hack.
Codex soll bei jeder Änderung prüfen, ob sie dieses Ziel unterstuetzt oder dbxapp komplizierter macht.
2. Nicht verhandelbare Vorgaben
- dbxapp bleibt PHP-Web-Runtime, keine Laravel-/React-/SPA-Neuerfindung.
- DD, FD, Templates, Module und Client-Libs bleiben zentrale Saeulen.
- Alte Module müssen lauffähig bleiben, solange nichts anderes vereinbart ist.
- Neue APIs werden kompatibel als zusätzliche Schicht eingeführt.
- Direkte Kernel-Änderungen nur, wenn ein echter wiederverwendbarer Steckpunkt fehlt.
- myX-Vererbung ist offizielle Erweiterungsschicht, kein Notbehelf.
- State muss nachvollziehbar und wiederherstellbar sein.
- Konventionen dürfen helfen, müssen aber tracebar sein.
3. Architektur-Ziel
dbxApp Runtime dbxApi / Services dbxComponent-Stecknorm dbxForm dbxReport dbxGrid dbxDialog dbxWindow dbxWorkflow dbxProcess DD / FD Templates Module Client Runtime myX Overrides
Codex soll nicht sofort eine grosse Basisklasse erzwingen. Erst wird die Stecknorm in Form und Report bewiesen. Eine echte dbxComponent-Basisklasse kommt erst, wenn die gemeinsamen Funktionen stabil verstanden sind.
4. Komponenten-Stecknorm
Alle größeren Komponenten sollen langfristig diese Anschluesse verstehen:
id context dd fd tpl data state request actions events / hooks render client trace
Neue Methoden sollen kurz, sprechend und einheitlich sein:
->dd('kunde')
->fd('kunden|edit')
->tpl('kunden|edit')
->data($data)
->action($url)
->state('kunden.edit')
->run()
Jede neue Komponente soll allein funktionieren und in anderen Komponenten nutzbar sein.
5. Modulcode neuer Stil
Module sollen fachlich, kurz und lesbar sein.
class kunden { public function run() { return dbx()->actions($this) ->default('list') ->run(); } public function list() { return dbx()->report('kunden')->run(); } public function edit() { return dbx()->form('kunde')->run(); } }
Fortgeschrittene Anpassung bleibt möglich:
return dbx()->report('kunden')
->dd('kunde')
->fd('kunden|rpt-kunden')
->rows(25)
->search(['name', 'email'])
->rowEdit()
->rowDelete()
->on('format_row', [$this, 'formatCustomerRow'])
->run();
Wenn Codex in einem Modul viel technischen Standardcode sieht, soll geprüft werden, ob daraus ein Kernbaustein entstehen sollte.
6. Umgang mit bestehenden Modulen
Bestehende Module sind wertvoll, weil sie echte Anforderungen zeigen. Sie sollen nicht blind umgebaut werden.
- Ist-Muster erkennen: Routing, Form, Report, Grid, JSON, State, Aktionen, Speziallogik.
- Standardverhalten identifizieren, das in den Kern gehört.
- Fachliche Sonderlogik erhalten.
- Neue Baustein-API an Pilotstellen einführen.
- Alten Code nicht entfernen, solange kein kompatibler Ersatz existiert.
- Bei grossem Umbau lieber Modul neu nach Methodik erstellen als kosmetisch flicken.
Aktuelle Muster:
- myLKW: Routing, Sync, Tagesverschiebung, JSON, Prozesse.
- myLKW_list: Grid read/sort/save/delete/sync.
- myLKW_report: Spezialreport, Row-Formatierung, Print-Spalten.
- dbxUser_admin: Admin-Reports, Row-/Multi-Actions, Modal.
- dbxContent_edit: Form-Edit-Flow, Observer, Wait-State.
7. Form- und Report-Strategie
Form und Report sind die ersten Kernbausteine für die neue Methodik.
dbxForm
Standard-Edit-Flow in den Kern: RID lesen, Daten laden, Felder aufbauen, Submit prüfen, changed prüfen, speichern, Meldungen setzen, State sichern, Editor/Trace sichtbar machen.
dbxReport
Standard-Listen-Flow in den Kern: Suche, Sortierung, Pagination, Selektion, Row-Actions, Multi-Actions, Daten laden, Row-Hooks, Rendern.
Kompatibilität
forward_init(), forward_run() und direkte Properties bleiben zunächst bestehen. Neue Methoden werden ergänzt, nicht erzwungen.
8. Hooks und Events
Codex soll Erweiterbarkeit über klare Hooks herstellen, nicht über Kopien grosser Methoden.
before_load after_load before_validate after_validate before_save after_save before_process after_process before_render after_render on_error on_cancel
Report-spezifisch:
format_row row_class before_row after_row row_action before_query after_query
Grid-spezifisch:
before_read after_read before_save after_save before_delete after_delete sync json_response
Hooks müssen dokumentiert, vorhersehbar und mit Trace sichtbar sein.
9. Workflow- und Process-Arbeit
Codex soll Workflow und Process sauber trennen:
Workflow = fachlicher Ablauf Process = technische Ausfuehrung Step = einzelner Schritt State = gespeicherter Zustand
Workflows sind smart, nicht starr:
- nächster Schritt nach Zustand
- Benutzerentscheidung möglich
- Fehlerbehandlung möglich
- Wiederaufnahme möglich
- Abbruch und Pause möglich
Prozesse müssen für grosse Datenmengen chunkbar sein:
State laden Pause/Cancel pruefen Chunk verarbeiten Fortschritt speichern Status ausgeben
Prozesse dürfen nicht vom Browser-Leben abhängen. Der Browser steuert und zeigt nur an.
10. Persistenter State
Codex soll State als Kernanforderung behandeln, nicht als Nebenprodukt.
State-Ebenen:
sys = Laufkontext des aktuellen Requests mod = aktive Modulinstanz remember = laenger gueltiger Benutzer-/UI-State session = strukturierter Session-State process = persistenter Langlauf-State
Prozess-State muss mindestens enthalten:
process_id status current_step cursor processed_count total_count payload result last_error pause_requested cancel_requested updated_at
Beim Wiederöffnen von dbxapp muss klar erkennbar sein, welche Arbeit offen ist und wo fortgesetzt werden kann.
11. Trace-Pflicht
Keine Magie im Kern. Jede Komponente soll erklären können, was sie tut:
component: report users class: dbxReport / myReport / module custom class module: dbxUser_admin dd: dbxUser fd: dbxUser_admin|rpt-users tpl: dbxUser_admin|report-users state: dbxUser_admin.report.users actions: row_edit,row_delete,multi_delete hooks: format_row,before_query client: report.js/grid.js
Wenn Codex Konventionen einführt, muss der Trace die konkrete Auflösung zeigen.
12. Umsetzungsreihenfolge für Codex
- Vor Änderungen relevante Doku lesen: RAD-Konzept, Systemdoku, diese Datei, Roadmap.
- Bestehende Klassen und Modulmuster prüfen, bevor neue Abstraktion gebaut wird.
- Kleine kompatible API-Ergänzung bevorzugen.
- Ein Pilotmodul oder ein klarer Use Case zuerst.
- Trace und Doku bei neuen Bausteinen mitdenken.
- Tests oder Syntaxchecks ausführen, soweit möglich.
- Keine grosse Migration ohne explizite Freigabe.
13. Erste konkrete Arbeitspakete
- dbxApi: Factory-Methoden für db(), tpl(), form(), report() entwerfen.
- dbxForm: öffentliche Setter/Fluent-Methoden für DD, FD, TPL, Action, Data ergänzen.
- dbxReport: öffentliche Methoden für Fields, Query, Rows, Sort, Actions ergänzen.
- Trace-Struktur für Form/Report einführen.
- dbxAdmin Session-Liste als Report-Pilot vorbereiten.
- dbxUser_admin Gruppen-Form als Form-Pilot vorbereiten.
- myLKW_list als Grid-Pilot analysieren und neue Grid-Anforderungen ableiten.
- dbxProcess-DD/Tabelle konzipieren, aber erst nach Rücksprache implementieren.
14. Was Codex vermeiden soll
- Kein kompletter Rewrite.
- Kein neues externes Framework als Kernersatz.
- Keine Entfernung alter API-Wege ohne Freigabe.
- Keine statischen, unflexiblen Workflows.
- Keine versteckte automatische Auflösung ohne Trace.
- Keine Fachlogik in den Kernel schieben.
- Keine grossen Modulmigrationen ohne Pilot und Entscheidung.
15. Entscheidungsfragen vor größeren Umbauten
- Ist das ein allgemeiner Baustein oder nur ein Fachfall?
- Kann es über DD, FD, Template, Hook oder myX geloest werden?
- Bleiben alte Module lauffähig?
- Ist der neue Weg einfacher für Modulautoren?
- Ist der Ablauf tracebar?
- Ist State sauber gespeichert und wiederherstellbar?
- Ist Browser-Schließen sicher?
- Muss diese Änderung vorher besprochen werden?
16. Zielzustand
dbxapp soll am Ende für drei Gruppen funktionieren:
Können mit DD, FD, Templates und vorbereiteten Bausteinen kleine Anwendungen mit Wow-Effekt bauen.
Können alles anpassen: Properties, Hooks, Modulklassen, eigene Komponenten, Workflows, Prozesse.
Können über myX systemweit erweitern, ohne den Kernel zu forken.
17. Merksatz für Codex
dbxapp ist kein Puzzle und kein Zauberkasten. dbxapp ist eine klare LEGO-RAD-Runtime. Der Kern setzt die Stecknorm. DD, FD und Templates beschreiben die Anwendung. Komponenten fuehren vorhersehbar aus. Hooks und myX machen alles erweiterbar. State macht Arbeit wiederherstellbar. Das UI darf glaenzen.
Dokumentstand: 2026-04-29. Dieser Leitfaden ist Arbeitsgrundlage für Codex bei der Weiterentwicklung von dbxapp.