UWAGA: Przepraszam za długie pytanie!Czy obiekt powinien wypisać się do pliku, czy inny obiekt powinien na nim działać, aby wykonać operacje wejścia/wyjścia?
Próbuję zrozumieć niektóre kluczowe obszary leżące za orientacją obiektową i nie mogłem zdecydować w ten czy inny sposób o moim konkretnym pytaniu.
Załóżmy, że mam obiekt pełen uroczych danych. Boba klasy.
Bob myBob = new Bob("This string is data");
Powiedzmy, że chcemy zapisać zawartość myBob do pliku XML (bob.xml)
Powinienem akt obiekt na bob do zapisu zawartości na zewnątrz, czy też nie mam myBob to?
Przypadek 1: ustawa o obiekcie
Writer myWriter = new Writer(myBob, "C:\\bob.xml");
Przypadek 2: Zapisz metoda
myBob.Save("C:\\bob.xml");
Niektórzy ludzie są siding z opcją jednej jak to znaczy jeśli kod do zapisu plików jest zmieniony, nie musi być aktualizowany dla każdej metody składowania; promowanie ponownego użycia kodu, jak przypuszczam. Moim problemem jest pobieranie wszystkich danych z obiektów, które mogą mieć prywatne dane bez akcesora.
Sprawą dla opcji drugiej jest to, że metoda działa tylko na dane przechowywane przez obiekt i tak powinno być. Brak zakłóceń od innych obiektów.
Czy odpowiedź na moje pytanie jest jedną z tych "zależnych od sprawy"? Jeśli tak, to skąd wiadomo, że jedna metoda jest preferowana w stosunku do drugiej?
Cóż, przypadek 2 równie dobrze może być poprawny, to naprawdę zależy ... Nie ma wyraźnego "tak" lub "nie" w projekcie OO. Na przykład, możesz także pomyśleć o scenariuszach, w których jest to całkowicie w porządku, że twój obiekt implementuje interfejs IWriter. –
@divo: Zawsze są wyjątki, taka jest natura projektu. Nie jest to coś, co powinno być jawnie wywoływane. (I to jest także powód, dla którego zakwalifikowałem moje oświadczenie z "ogólnie".) –
Jaka jest zalecana strategia deserializacji obiektu? Czy w takim razie dobrze byłoby przekazać obiekt BinaryReader i dokonać deserializacji samej klasy? –