Hallo erstmal
Meine Frage lässt sich denke ich am besten mit einem Beispiel erklären:
Stellt euch vor ihr wolltet ein Programm machen, das irgendwelche Ordner auf der Festplatte sichert. Dafür würdet ihr die zu sichernden Ordner irgendwo hinterlegen müssen, dazu einen Ordner zum hin sichern angeben und vielleicht noch ein paar zusätzliche Daten wie 'Wann wurde das letzte mal gesichert' oder 'Gab es Fehler beim letzten Durchgang'.
Nun gibt es aber mehrere verschiedene Arten um einen Order zu sichern. (Sag ich jetzt mal so)
Jetzt könnte man seine Datenklasse in etwa so designen:
Und so konkretisieren:
Um was es mir jetzt eigentlich geht, ist das Speichern und Erzeugen dieser Objekte.
Angenommen die konkreten Klassen ObservedObject und IntervallObject unterscheiden sich dadurch, dass IntervallObject zusätzlich ein DateTime Property besitzt.
(Das gibt an, in welchem Abstand gesichert werden soll.)
Beim Speichern:
Muss ich dann natürlich erkennen, um welches Objekt es sich jetzt wirklich handelt und das besagte DateTime Property ebenfalls wegspeichern.
Beim Laden und Erzeugen:
Ist es das selbe. Ich muss erkennen, dass es sich um ein IntervallObject handelt, und das DateTime Property auslesen und setzen.
Wenn ich jetzt eine Datenbank zum speichern dieser "Objekte" nutze, muss ich (wenn ich alle in eine Tabelle) speichern will, natürlich ein entsprechendes Feld für das DateTime Property in die Definition aufnehmen, obwohl ich das gar nicht immer brauche. Auch wenn ich mal weitere Objektklassen die auf AbstractBase beruhen hinzufügen möchte, (die vielleicht andere Propertys brauchen) muss ich die ganze Datenbank tauschen. [Vorausgesetzt alles in einer Tabelle natürlich]
Im großen und ganzen Frage ich mich wie man so etwas am sinnvollsten aufbaut.
Nochmal die Kurzfassung:
Speichern und Erzeugen von Objekten, die grundsätzlich gleich sind (Vererbung möglich?), aber individuelle Merkmale auf weißen.
Diese Merkmale verhindern (quasi) ein immer gleiches Erzeugen, ein immer gleiches Speichern.
Ich wäre für alle Vorschläge (zu diesem sicher einfachen Thema) offen, auch gerne mit einem anderen Beispiel.
(Das hab ich mir gerade aus den Fingern gesogen, und es ist nicht sonderlich gut )
Mit freundlichen Grüßen
logihogi
PS: Erkläre es auch gerne nochmal anders, sollte man nicht verstehen was ich den nun eigentlich will.
Meine Frage lässt sich denke ich am besten mit einem Beispiel erklären:
Stellt euch vor ihr wolltet ein Programm machen, das irgendwelche Ordner auf der Festplatte sichert. Dafür würdet ihr die zu sichernden Ordner irgendwo hinterlegen müssen, dazu einen Ordner zum hin sichern angeben und vielleicht noch ein paar zusätzliche Daten wie 'Wann wurde das letzte mal gesichert' oder 'Gab es Fehler beim letzten Durchgang'.
Nun gibt es aber mehrere verschiedene Arten um einen Order zu sichern. (Sag ich jetzt mal so)
- Intervall gesteuert. (Bsp. Immer nach 5Tagen zb.)
- Überwacht. (Bsp. Immer wenn sich an dem Ordern etwas ändert)
- ... Keine Ahnung, Bei Vollmond
Jetzt könnte man seine Datenklasse in etwa so designen:
Code:
public abstract class AbstractBase { public string sDirectoryName { get; set; } public DateTime dtLastBackup { get; set; } public Exception exLastError { get; set; } public AbstractBase(string sDirName) { sDirectoryName = sDirName; } public abstract void vStartBackup(); }
Code:
public class ObservedObject : AbstractBase { public override void vStartBackup() { Console.WriteLine("DoTheGagaThing"); } }
Angenommen die konkreten Klassen ObservedObject und IntervallObject unterscheiden sich dadurch, dass IntervallObject zusätzlich ein DateTime Property besitzt.
(Das gibt an, in welchem Abstand gesichert werden soll.)
Beim Speichern:
Muss ich dann natürlich erkennen, um welches Objekt es sich jetzt wirklich handelt und das besagte DateTime Property ebenfalls wegspeichern.
Beim Laden und Erzeugen:
Ist es das selbe. Ich muss erkennen, dass es sich um ein IntervallObject handelt, und das DateTime Property auslesen und setzen.
Wenn ich jetzt eine Datenbank zum speichern dieser "Objekte" nutze, muss ich (wenn ich alle in eine Tabelle) speichern will, natürlich ein entsprechendes Feld für das DateTime Property in die Definition aufnehmen, obwohl ich das gar nicht immer brauche. Auch wenn ich mal weitere Objektklassen die auf AbstractBase beruhen hinzufügen möchte, (die vielleicht andere Propertys brauchen) muss ich die ganze Datenbank tauschen. [Vorausgesetzt alles in einer Tabelle natürlich]
Im großen und ganzen Frage ich mich wie man so etwas am sinnvollsten aufbaut.
Nochmal die Kurzfassung:
Speichern und Erzeugen von Objekten, die grundsätzlich gleich sind (Vererbung möglich?), aber individuelle Merkmale auf weißen.
Diese Merkmale verhindern (quasi) ein immer gleiches Erzeugen, ein immer gleiches Speichern.
Ich wäre für alle Vorschläge (zu diesem sicher einfachen Thema) offen, auch gerne mit einem anderen Beispiel.
(Das hab ich mir gerade aus den Fingern gesogen, und es ist nicht sonderlich gut )
Mit freundlichen Grüßen
logihogi
PS: Erkläre es auch gerne nochmal anders, sollte man nicht verstehen was ich den nun eigentlich will.
Comment