Open j3nsch opened 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.
Sinnvoller ist wohl daher nur ein Poperty zu verwenden, welches auf die Tabelle gemappt wird.
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.
Die Klasse
Opus\TitleAbstract
erbt vonOpus\Title
und setzt das FeldType
auf den Wert abstract. Der Hauptunterschied ist, dass das FeldValue
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?