Laden...

Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen

Erstellt von Xqgene vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.498 Views
X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 11 Jahren
Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen

Hi,

ich suche nach "bester" Lösung für folgendes Problem.

Es gibt ein Objekt Person. Dieses Objekt enthält Beziehungen zu anderen Person Objekten.

class Person {
  ind id;
  List<Person> children;
  List<Person> parents; 
}

die Objekte werden in eine XML Datei gespeichert. etwa so:


<xml>
  <Person>
    <id>1</1>
    <Children>
      <Person id="3" />
      <Person id="4" />
    </Children>
    <Partens>
      <Person id="2" />
    </Partens>
  </Person>
  <Person>
    <id>2</1>
    <Children>
      <Person id="1" />
    </Children>
  </Person>
  <Person>
    <id>3</1>
    <Partens>
      <Person id="1" />
    </Partens>
  </Person>
  <Person>
    <id>4</1>
    <Partens>
      <Person id="1" />
    </Partens>
    <Children>
      <Person id="5" />
    </Children>
  </Person>
  <Person>
    <id>5</1>
  </Person>
</xml>

Und später wieder geladen.
Und genau hier steckt mein Problem. Ich suche also effektivste Möglichkeit die Objekte aus der XML Datei zu laden und die Beziehung herzustellen. Wenn ich zuerst alle Person Objekte erstelle und dann aus der Liste die children und parents suche, mache ich unter Umständen mehrere Durchläufe, biss alle Beziehungen hergestellt sind.
Wenn ich gleich alle Beziehungen herstelle, dann muss ich durch die XML Datei hin und her springen.
Noch 'ne Möglichkeit wäre, dass ein Person Objekt über Erzeugung eines anderen Objektes informiert wird und fügt den dann bei bedarf zu seinen Beziehungen hinzu.

Oder noch weitere Vorschläge?

X
Xqgene Themenstarter:in
2.051 Beiträge seit 2004
vor 11 Jahren

da bin ich wieder.

also, der Surrogat Vorschlag ist zwar interessant, löst aber nicht wirklich mein Problem. ich habe jetzt eine "Benachrichtigungs"-Lösung gebastelt.

Objekte (Personen in dem Beispiel von oben) registrieren sich bei einem "Creator" mit einer bestimmten Benachrichtigungsbedienung. Ist beim Erstelle eines Objektes diese Bedienung erfüllt (z.b. Id des Objektes stimmt überein), wird das registrierte Objekt darüber benachrichtigt.

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo Xqgene,

meinst du dass so, dass wenn ein Objekt mit eine bestimmten ID erstellt werden soll, aber ein Objekt mit dieser ID schon existiert, dass dann das bestehende Objekt benachrichtigt wird?

Oder registriert ein Objekt alle IDs über deren Objekt-Erstellungen es benachrichtigt werden will?

Bei der zweiten Möglichkeit, müsste sich jedes Objekt (bzw. jede Klasse) darum kümmern, was passieren soll, wenn so eine Benachrichtigung kommt, z.B. ob es das Objekt jetzt in die Parent- oder Children-Liste eingetragen werden soll. Das Modell müsste sich dann um etwas kümmern, was eigentlich der DAL kapselen sollte. Außerdem wäre das dann unnötigerweise ein Cross-Cutting Concern, der in jeder neuen Klasse, die von dem Problem steht, wieder ausprogrammiert werden müsste. Mal ganz abgesehen davon, dass man vor dem Problem von nur teilweise gefüllten Listen stehen würde.

Mit den Surrogaten hättest du es dagegen an einer zentralen Stelle ein- für alle mal abgehandelt. Außerdem kann das Surrogat das eigentliche Laden an den DAL delegieren. Und die Listen sind (logisch gesehen) zu jedem Zeitpunkt komplett (auch wenn die Objekte physisch noch nicht geladen sind). Also alles schön sauber.

Ich wüsste auch nicht, warum Surrogate dein Problem nicht lösen sollten.

herbivore