Wichtig
#27999
Kompositionsreferenzen in verschiedenen Tabellen speichern
Zur Zeit werden die Werte aller Kompositionsreferenzen in einer Tabelle gespeichert. Dies hat den Vorteil, dass auf Datenbankseite sichergestellt werden kann, dass ein Element nicht in 2 verschiedenen Referenzen zugeordnet sein kann.
Der Nachteil ist, dass eben alle Zuordnungen in dieser einen Tabelle gespeichert werden und diese sehr groß werden kann. Weiterhin kann die Assoziation nicht inline in dem "Teil" gespeichert werden.
Verbesserung
Das Paradigma, dass die Datenbank sicherstellt, dass ein Element nur in einer Kompositionsreferenz enthalten ist, wird aufgegeben. Es soll möglich sein, eine eigene Assoziationstabelle angeben zu können.
Daten-Migration
Die Attribute tl.element:StructuredElementContainer#children und tl.elementStructuredElement#parent sind abstrakt geworden und müssen überschrieben werden. Wenn die Anwendung eine Struktur mit Hilfe von StructuredElement definiert, so muss es eine gemeinsame Oberklasse von allen Objekten geben die als Kinder auftreten können und eine gemeinsame Oberklasse aller Klassen die Kinder haben können. Gibt es keine solche Klassen so können diese mit folgendem Pattern erstellt werden:
- Anlage von einer Oberklasse aller Kinder und einer Oberklasse aller Parents. Die Namen StructuredElementExt und StructuredElementContainerExt sind nur beispielhaft zu verstehen und entsprechend anzupassen: {{{
<interface name="StructuredElementExt"> <generalizations>
<generalization type="tl.element:StructuredElement"/>
</generalizations> <attributes>
<reference name="parent"
kind="backwards"
override="true"
type="StructuredElementContainerExt"
/>
</attributes> </interface> <interface name="StructuredElementContainerExt"> <generalizations>
<generalization type="StructuredElementExt"/>
<generalization type="tl.element:StructuredElementContainer"/>
</generalizations> <attributes>
<reference name="children"
override="true"
type="StructuredElementExt"
/>
</attributes> </interface> }}}
- Interfaces und Klassen in der Struktur die tl.element:StructuredElement erweitern müssen dann StructuredElementExt erweitern und Erweiterungen von tl.element:StructuredElementContainer müssen zu Erweiterungen von StructuredElementContainerExt werden.
Test
Wird im Module DemoTypes und tl.doc benutzt.