Skip to content

Refactor: Renderpfade schrittweise vereinheitlichen (Parser + Flex-Repeater) #437

Description

@skerbis

Hintergrund

Aktuell existieren in MForm mehrere Renderpfade mit teilweise überlappender Layout-Logik (u. a. Wrapper/Row/Column/Modal in klassischem Parser und Flex-Repeater).

Das ist historisch nachvollziehbar, führt aber in der Praxis zu:

  • doppelter Pflege bei Layout-Fixes
  • erhöhtem Risiko für Verhaltensdrift
  • wiederkehrenden Regressionen (z. B. Row/Col-Themen)

Ziel

Schrittweise Vereinheitlichung der Renderlogik ohne Breaking Changes für bestehende Module.

Vorschlag (inkrementell)

  1. Gemeinsamen internen Layout-Core definieren
  • Zentrale Regeln für Wrapper-Strukturen (Row, Column, Modal, Tab, Collapse).
  • Parser und Flex-Repeater nutzen dieselben Kernregeln.
  1. Bestehende öffentliche APIs unverändert lassen
  • Keine Änderung an add*()-Methoden-Signaturen.
  • Keine Änderung an gespeicherten Datenformaten.
  1. Kompatibilitätsnetz einziehen
  • Snapshot-/Golden-Tests für typische Wrapper-Kombinationen.
  • Spezifische Regression-Tests für addColumnElement + Repeater + Modal.
  1. Optionales Verhalten über Attribute statt Sonderpfade
  • Erweiterungen über klar benannte Attribute/Klassen.
  • Kein implizites Hart-Coding pro Pfad.
  1. Migration in kleinen PR-Schritten
  • Erst intern konsolidieren, dann sukzessive alte Duplikate abbauen.
  • Jede Stufe mit php-cs-fixer + rexstan + visueller Gegenprobe absichern.

Akzeptanzkriterien

  • Gleiches Verhalten in klassischem Parser und Flex-Repeater für identische Wrapper-Szenarien.
  • Keine erforderlichen Anpassungen an bestehenden Modulcodes.
  • Dokumentierte, optionale Erweiterungspunkte (Attribute/Klassen).
  • Kein Rückschritt in den bestehenden Row/Col-Fixes.

Notizen

  • Der aktuelle Stand enthält bereits Fixes für Row/Col-Probleme.
  • Dieses Issue dient als struktureller Folgepunkt, um künftige Doppel-Fixes zu vermeiden.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions