HINWEIS: Entschuldigung für die lange Frage!Sollte sich ein Objekt selbst in eine Datei schreiben oder sollte ein anderes Objekt darauf reagieren, um I/O durchzuführen?
Ich versuche einige Schlüsselbereiche hinter der Objektorientierung zu verstehen, und ich konnte mich nicht in irgendeiner Weise für meine spezielle Frage entscheiden.
Nehmen wir an, ich habe ein Objekt voller schöner Daten. Klasse Bob.
Bob myBob = new Bob("This string is data");
Lassen Sie uns sagen, dass ich den Inhalt myBob in eine XML-Datei (bob.xml)
Soll ich ein Objekt handeln bob müssen sparen möchten den Inhalt aus, zu schreiben oder sollte ich tun myBob Dies?
Fall 1: Gesetz über Objekt
Writer myWriter = new Writer(myBob, "C:\\bob.xml");
Fall 2: Save Methode
myBob.Save("C:\\bob.xml");
Manche Menschen sind Abstellgleis mit der Option ein, da es bedeutet, wenn der Code für das Schreiben von Dateien ist geändert, muss es nicht für jede Save-Methode aktualisiert werden. Ich befürworte die Wiederverwendung von Code. Mein Problem damit ist, alle Daten aus Objekten zu bekommen, die private Daten ohne Accessor haben können.
Der Fall für Option zwei ist, dass die Methode wirkt nur auf den vom Objekt gehaltenen Daten und das ist so, wie es sein sollte. Keine Beeinträchtigung durch andere Objekte.
Oder ist die Antwort auf meine Frage eines dieser "fallabhängigen" Probleme? Wenn ja, woher weißt du, wenn eine Methode der anderen vorgezogen wird?
Nun, Fall 2 könnte genauso gut stimmen, es kommt wirklich darauf an ... Es gibt kein klares Ja oder Nein im OO-Design. Zum Beispiel könnten Sie auch Szenarien denken, in denen es völlig in Ordnung ist, dass Ihr Objekt nur eine IWriter-Schnittstelle implementiert. –
@divo: Es gibt immer Ausnahmen, das ist die Art des Designs. Es ist nicht etwas, das explizit herausgerufen werden sollte. (Und das ist auch der Grund, warum ich meine Aussage mit "im Allgemeinen" qualifiziert habe.) –
Was ist die empfohlene Strategie zur Deserialisierung des Objekts? Wäre es in Ordnung, dann ein BinaryReader-Objekt zu übergeben und die Klasse sich deserialisieren zu lassen? –