OPUS4 / framework

OPUS 4 Database Implementation
Other
2 stars 7 forks source link

Title und TitleAbstract auf Doctrine umstellen #186

Open j3nsch opened 2 years ago

j3nsch commented 2 years ago

Die Klasse Opus\TitleAbstract erbt von Opus\Title und setzt das Feld Type auf den Wert abstract. Der Hauptunterschied ist, dass das Feld Value als Textarea markiert wird. Die Modellklassen haben ursprünglich die Darstellung im Formularen gesteuert. Das ist nicht mehr der Fall und würde, wenn überhaupt nur wieder über eine externe Descriptor-Klasse realisiert. Brauchen wir also weiterhin zwei Klassen?

Beide Klasse werden in der Datenbank in der selben Tabelle gespeichert. Für jeden Title-Typ gibt es ein Feld im Document-Modell.

Alle fünf Properties werden als auf die selbe Tabelle gemappt. Die erste Frage ist, ob das mit Doctrine-ORM möglich ist?

TODO Können mehrere Properties mit der gleichen Entität, anhand eines Properties der Entität, Type, gemappt werden?

Abhängig von der Antwort muss entschieden werden, ob das Mapping dem ORM überlassen werden kann oder ob es intern nur noch ein Title-Property geben wird, dass auf die Tabelle gemappt wird und die alten Funktionen als Wrapper um dieses neue Property in der Modell-Klasse implementiert werden.

TODO Was sind die Pros/Cons der beiden Ansätze, wenn beide möglich sind? Weitere Alternativen?

haogatyp commented 2 years ago

Mehrere Properties können mittels "Single Tabel Inheritance" auf die eine Tabelle gemappt werden. Allerdings funktioniert die Unterscheidung mittels "type" nur durch Einführung eigener Klassen (TitleMain, TitleParent, TitleSub, TitleAdditional, TitleAbstract), mit "type" als discriminator. Da unsere Titel aber keinen Anteil von eigenen und unterschiedlichen Feldern haben, ist "Single Tabel Inheritance" hierfür eigentlich nicht die beste Wahl. Nachteilig wären sicher auch die zusätzlichen Klassen, die wir ansonsten nicht wirklich benötigen. Mit 5 festen Properties wären wir auch weniger flexiblen falls Typen hinzukommen.

haogatyp commented 2 years ago

Sinnvoller ist wohl daher nur ein Poperty zu verwenden, welches auf die Tabelle gemappt wird.

j3nsch commented 2 years ago

Alle fünf Felder haben die gleiche Logic, also add, set und get, mit einzelnen Objekten und Arrays und get kann Index-Parameter verarbeiten. Wenn ein Title-Objekt über eine Method wie addTitleSub oder setTitleAdditional hinzugefügt wird, dann wird das Type-Attribute der Objekte gesetzt.

Wir können diese Logic jetzt einfach noch mal separate für jedes Feld implementieren. Früher wurde das von der Field-Klasse umgesetzt. Es scheint sinnvoll wieder eine Lösung zu finden, bei der diese Logic an nur einer Stelle implementiert werden muss. Ich will damit aber im Augenblick, in diesem Jahr, nicht die Entwicklung bremsen. Das ist etwas was wir später bereinigen können.