OPUS4 / opus4-common

Core package for OPUS 4.
Other
0 stars 5 forks source link

Descriptor-Klassen für das Datenmodell #77

Open j3nsch opened 2 years ago

j3nsch commented 2 years ago

Mit den Klassen ModelDescriptor und FieldDescriptor soll das Datenmodell beschrieben werden. Das soll die Beschreibung des Datenmodells unabhängig von den Instanzen einer Model-Klasse machen.

In der alten Framework-Implementation wurden Field-Objekte für jedes Feld eines Model-Objekt erzeugt. Für ein Dokument mit 900 Autoren (bekannter Extremfall) heißt das etwa 9000 Field-Objekte für die Autoren allein. In der neuen Implementation sollen die beschreibenden Objekte nur noch einmal existieren. Das senkt den Speicherverbrauch, erhöht die Performanz und vereinfacht die Modellklassen.

j3nsch commented 2 years ago

In den ersten Schritten definieren die Modelklassen, wie Opus\Common\UserRole, ihre Beschreibung als Array. Es wäre denkbar, dass das in Zukunft in JSON-Dateien ausgelagert wird.

Es ist auch denkbar Erweiterungen zu erlauben, wenn es die darunter liegende Datenbank-Implementation erlaubt. Das heißt das Datenmodell kann um Felder, auch komplexe, erweitert werden. Das Problem dabei sind potentielle Konflikt mit existierenden Funktionen in den Modellklassen, wenn Get/Set/Add-Funktionen dynamisch generiert werden. Es ist einfacher, wenn erweiterte Felder (Enrichments 3.0?) über spezielle Funktionen gehandhabt werden. Die Vor- und Nachteile müssen noch abgewogen werden. Es müssen auch erst einmal noch weitere Erfahrungen mit der auf Doctrine basierenden Implementation gesammelt werden.

j3nsch commented 2 years ago

Dokumentation zum ModelDescriptor im Wiki von opus4-model angefangen.

https://github.com/OPUS4/opus4-model/wiki/Model-Descriptor

j3nsch commented 2 years ago

Als nächstes sollten die Descriptor-Klassen mit Tests für alle Varianten der Nutzung und Erweiterung implementiert werden. Es macht Sinn an dieser Stelle sämtliche Datenmodell so komplett wie möglich in die Beschreibungen aufzunehmen und dabei die verbleibenden Problemfälle zu identifizieren.