yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

Änderung der Signatur durch `final` keyword in der Dataset Klasse rückgängig machen #1498

Closed dgrothaus-mc closed 5 months ago

dgrothaus-mc commented 6 months ago

Wir nutzen in einigen etwas komplexeren Projekten von yForm hauptsächlich yORM für den Zugriff auf Daten. Im Rahmen der Entwicklung sind einige Klassen entstanden, welche yForm so erweitern, dass auch Tabellen mit zusammengesetzten Primärschlüsseln oder VARCHAR Primärschlüsseln unterstützt werden.

Um alle Komponenten von yForm kompatibel miteinander zu halten, wird die Funktion private static function modelToTable(): string; überschrieben, um Zugriff auf die private Variable private static array $modelToTable = []; zu erhalten. Durch die Deklaration der Methode modelToTable() als final gibt es keine Möglichkeit mehr, die Variable $modelToTable zu beeinflussen.

In einer gewöhnlichen OOP Umgebung wäre das nicht weiter schlimm, da man die verwendete Klasse mit dem final Keyword einfach durch eine eigene Klasse ersetzen würde. Leider bietet yForm nicht, anders also zum Beispiel die PDO mit PDO::ATTR_STATEMENT_CLASS für Statements, die Möglichkeit eine alternative Klasse anzugeben, welche zum Erzeugen von Datasets genutzt werden soll.

Ein Update auf Version 4.2.0 versetzt ein betroffene Projekte daher in einen Fehlerzustand, der sich nur durch ein Downgrade beheben lässt. Eine Änderung der Signatur einer protected Method auf final würde ich in einer einer Minor-Version auch nicht erwarten.

Den Wunsch, die Programmierung von yForm weiter zu sichern und zu festigen, verstehe ich. Allerdings ist auch eine der Stärken von Redaxo, dass erfahrene Entwickler das System sehr flexibel anpassen können, was durch diese Änderung stark eingeschränkt wird.

Eine Öffnung der API, um einfacher die Funktionalität den eigenen Bedürfnissen anzupassen, würde ich begrüßen. Eventuell ist auch eine Diskussion nötig, um unterschiedliche Meinungen einzuholen. Wie vielleicht aus #1438 und #1437 ersichtlich, wird recht ausgiebig Gebrauch von yORM gemacht und auch angepasst, wenn Funktionalität vorhanden ist.