Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2.051

Themenstarter:

Beziehung zwischen Objekten beim Laden der Objekte wiederherstellen

beantworten | zitieren | melden

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?
"A programmer is a tool which converts coffein to code."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Xqgene,

siehe Von einer serialisierten Datei auf Objekt in einer anderen serialsierten Datei verweisen und Designfrage Serialisierung von Referenzen [==> Surrogate].

herbivore
private Nachricht | Beiträge des Benutzers
Xqgene
myCSharp.de - Member



Dabei seit:
Beiträge: 2.051

Themenstarter:

beantworten | zitieren | melden

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.
"A programmer is a tool which converts coffein to code."

Evely ToDo-Manager 1.2 (Build 1.2.585)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers