Objekte gemeinsam nutzen

Status
Nicht offen für weitere Antworten.

Elephant

Aktives Mitglied
Hallo,

bei einer Anwendung möchte ich verschiedene XML-Dateien einlesen. In diesen Dateien sind 'Objekte' also im Prinzip z.B

Code:
<Klasse>
   <Id></Id>
   <Klassenlehrer>Herr SoUndSo</Klassenlehrer>
</Klasse>

Man soll mehrere XML-Dateien gleichzeitig einlesen, darstellen und ändern können, also als WYSIWYG, nicht das XML an sich. Nun kann es vorkommen, dass Man z.B. XML-Dateien gleichzeitig öffnet, die das gleiche 'Objekt' enthalten, jedenfalls laut ID. Z.B. man hat eine XML-Datei in der alle Klassen aufgelistet sind, in einer anderen Datei sind die Zimmerbelegungen aufgelistet. (Ich weiß, mit Datenbanken ließe sich das viel einfacher realisieren, aber das geht in dem Fall nicht.)

Ich habe mir nun gedacht, dass ich für Objekte eines Typs einfach eine Hashtable anlege und sie dort reinspeichere und bei der Darstellung der XML-Dateien im WYSIWYG immer nur die Referenzen auf das entsprechende Objekt habe. Also z.B. wenn ich eine JTable hat, die die verschiedenen Klassen mit allen Attributen etc. darstellt, sind da nur die Referenzen auf die Objekte, die in der Hashtable sind, abgelegt. Gleichzeitig wird vielleicht eine Tabelle dargestellt, die die Zimmerbelegung für die Klassen anzeigt, dort benutze ich auch nur eine Referenz. Wenn man jetzt dort den Lehrer ändert/editiert kann dann automatisch auch die andere Ansicht aktualisiert werden, da sich ja das eine Objekt ändert.

Die Frage ist nun, sollte man dies so machen oder ist das ein ganz falscher Ansatz.

Und die zweite Frage ist, wenn ich beim Einlesen einer Datei die Objekte in die Hashtable speichere, und beim einlesen einer zweiten Datei nur schaue ob ein Objekt schon existiert (kann ich über die ID prüfen) dann bleiben die Objekte ja immer in der Hashtable liegen, weil dort immer eine Referenz vorhanden ist. Kann man irgendwie zählen, wieviele Referenzen auf ein Objekt bestehen, denn wenn man alle 'Views'/XML-Dateien wieder schließen würde, bräuchte man das Objekt ja nicht mehr.

Wahrscheinlich habe ich mich vollkommen unverständlich ausgedrückt. Ich würde mich trotzdem freuen, wenn jemand eine Idee hat.
 
...dass Man z.B. XML-Dateien gleichzeitig öffnet, die das gleiche 'Objekt' enthalten, jedenfalls laut ID. Z.B. man hat eine XML-Datei in der alle Klassen aufgelistet sind, in einer anderen Datei sind die Zimmerbelegungen aufgelistet
Desastergefahr: ist wirklich sicher das nur die ID doppelt vorkommt wird und nicht der "Inhalt des Objekts"

ansonsten mach eine Map, mit Key=ID und Value=passendes Objekt oder DOM oder String oder was auch immer...

wenn du eine ID nicht mehr brauchst, dann entferne den Key, das reicht...
 
Hallo, danke erstmal für die Antwort, ich glaube, ich habe sie nur nicht so ganz verstanden.

Also ich versuch das nochmal zu erklären was ich meine, ich habe z.B. 2 XML Dateien.

Die 1.:

Code:
<Klassen>
  <Klasse id="1">
     <Klassenlehrer>Soundso</Klassenlehrer>
     ...
  </Klasse>
  <Klasse id="2">
     <Klassenlehrer>Soundso2</Klassenlehrer>
     ...
  </Klasse>
</Klassen>

diese XML-Datei lese ich ein und stelle sie dar z.B. so

Code:
Klasse    Lehrer
   1       SoundSo
   2       SoundSo2


Dann die zweite Datei.:

Code:
<Zimmerbelegungen>
  <Belegung>
    <Zimmer id="3">
    <Klasse id="1">
  </Belegung>
  <Belegung>
    <Zimmer id="2">
    <Klasse id="2">
  </Belegung>
</Zimmerbelegung>

diese XML-Datei lese ich ein und stelle sie dar z.B. so

Code:
Zimmer   Klasse
   3             1
   2             2


Da es sich in beiden Dateien um die gleichen 'Klassenobjekte' handelt, dachte ich mir, dass ich z.B. für die Klasse mit der ID 1 nur ein Objekt erstellen muss, dass auch bei Änderungen geändert wird, so dass gleich alle Sichten abgeändert werden können. Deswegen wollte ich die 'Zimmerobjekte' z.B. in eine Hashtable Zimmer speichern mit key=id und value=Objekt, wie Du gesagt hast. Wenn ich also die zweite Datei aufrufe will ich in der Hashtable nachschauen ob das Objekt der Klasse mit der ID 1 schon vorhanden ist und dann eine Referenz darauf benutzen. Wenn ich jetzt aber die Sichten schließe weiß ich ja nicht ob irgendwo anders noch eine Sicht offen ist, die dieses Objekt benutzt oder ob ich es aus der Hashtable löschen kann, es sei denn ich könnte irgendwie die Referenzen zählen.

Ich glaube mittlerweile mein Ansatz ist doch ziehmlich ungeschickt.
 
Hi,

im Prinzip geht das schon so, wie du willst. Du darfst das nur nicht so in die XML-Dateien schreiben. Du mußt eindeutig unterscheiden können, ob nun ein Objekt definiert wird oder ob es sich nur um eine Referenz handelt.

z.B.

Code:
<Zimmerbelegungen> 
  <Belegung> 
    <Zimmer refid="3"> 
    <Klasse refid="1"> 
  </Belegung> 
  <Belegung> 
    <Zimmer refid="2"> 
    <Klasse refid="2"> 
  </Belegung> 
</Zimmerbelegung>

EDIT: Du mußt natürlich beim Laden darauf achten, daß die Objekt-Daten schon da sind oder auf Anforderung geladen werden können, wenn sie referenziert werden.

Gruß
Mag1c
 
nein, das mit dem Referenzen zählen funktioniert nicht

mach dir lieber alles ein

mach dir eine Klasse Klasse 🙂

und bei der Klasse eine MemberCollection "belegteZimmer"

usw.

vergiss das erst mal, spielt der Speicher überhaupt eine Rolle?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben