Objekt wird aus XPF geladen, Klasse hat sich geändert

Alle Fragen um die Programmierung, die sich sonst nicht kategorisieren lassen. Von Makro bis Codeblock, von IF bis ENDIF

Moderator: Moderatoren

Antworten
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Objekt wird aus XPF geladen, Klasse hat sich geändert

Beitrag von Tom »

Ein Klassenobjekt - selbstdefinierte Klasse, keine riskanten Elemente enthalten, die nicht-persistent bzw. nicht-persistenzfähig wären - wird in einer XPF-Datei gespeichert. Ich will diesen Weg nicht diskutieren und keine Alternativen hören, danke! Jetzt wird das Objekt aus der XPF-Datei restauriert. Es ist kein DataObject (auch das will ich nicht diskutieren, danke!). Wenn die Klasse inzwischen erweitert wurde, kennt das restaurierte Objekt Instanzvariablen nicht, die seit seiner Speicherung hinzugekommen sind, und wenn man auf die dann zugreifen will, knallt es. Darauf kann man zwar vergleichsweise elegant über die NotfiyLoaded()-Methode reagieren, aber im Prinzip müsste man dann über IsMemberVar einzeln abfragen, ob ggf. neue iVars vorhanden sind oder nicht. Und wenn nicht, muss man ein neues Objekt erzeugen, das geladene inhaltlich Schritt für Schritt klonen und dann ersetzen. Oder gibt es für diesen Schritt einen eleganteren Weg?
Herzlich,
Tom
ramses
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2513
Registriert: Mi, 28. Jul 2010 17:16
Hat sich bedankt: 12 Mal
Danksagung erhalten: 77 Mal

Re: Objekt wird aus XPF geladen, Klasse hat sich geändert

Beitrag von ramses »

Ja. über das Filedatum oder eine Versionsnummer in der Klasse prüfen ob die gespeicherte Klasse zum aktuellen Programm passt. Wenn nicht die Datei verwerfen, umbauen oder sonst was tun das es nicht zum Knall kommt....
Valar Morghulis

Gruss Carlo
Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 9345
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 100 Mal
Danksagung erhalten: 359 Mal
Kontaktdaten:

Re: Objekt wird aus XPF geladen, Klasse hat sich geändert

Beitrag von Tom »

Hallo, Carlo.

Man kann nach dem Laden prüfen, ob das geladene Objekt bestimmte iVars schon kennt (IsMemberVar), und wenn das nicht der Fall ist, erzeugt man ein neues Objekt und lädt alle iVars aus dem Dateiobjekt dort hinein. Das kann nur - je nach Anzahl der iVars - eine ziemliche Portion Code werden, dabei geht es nur darum, diejenigen iVars, die das alte Objekt nicht kennt, mit den Default-/Init-Werten der Klasse zu besetzen. Datei wegschmeißen ist keine so gute Idee, weil dann auch die Daten darin weg wären. :wink:
Herzlich,
Tom
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Objekt wird aus XPF geladen, Klasse hat sich geändert

Beitrag von brandelh »

Wenn du eine zukunftssichere Methode willst, musst du immer ein neues Objekt erzeugen (das hat dann den aktuellen Stand) und danach vom alten die belegten Inhalte übertragen.
Ich sehe keine Methode die das automatisch macht (kann natürlich sein, dass ich sie nur nicht gefunden habe, oder dass die versteckt ist), ich würde das grundsätzlich in eine Funktion auslagern (neues und geladenes Objekt als Parameter).

Ich hoffe das war jetzt noch im Rahmen der oben festgelegten, erlaubten Antwort Parameter 8)
Gruß
Hubert
Antworten