2010-02-23 5 views
5

Mam klasa, która definiuje historyczną ekstrakcji w bazie danych:Najlepszy sposób organizowania Ładuj/zapisz funkcje pod względem statycznym/non-statycznego

class ExtractionConfiguration 
{ 
    string ExtractionName; 
    time ExtractionStartTime; 
    time ExtractionEndTime; 

    // Should these functions be static/non-static? 
    // The load/save path is a function of ExtractionName 
    void SaveConfigruation(); 
    void LoadConfiguration(); 
} 

Te ExtractionConfigurations muszą być zapisywane/wczytywane z dysku . Jaki jest najlepszy sposób organizacji funkcji składowania/ładowania pod względem statycznym/niestatycznym? Dla mnie oczywiste jest, że funkcja SaveConfiguration() powinna być funkcją członka. Jednak z LoadConfiguration(), to ma więcej sensu, aby zadzwonić

ExtractionConfiguration newExtraction; 
newExtraction.LoadConfiguration(); 

i mają tymczasowy pusty instancji lub dokonać funkcji obciążenia statycznego

static ExtractionConfiguration LoadConfiguration(string filename); 

i zadzwoń

ExtractionConfiguration newExtraction = ExtractionConfiguration::LoadConfiguration(filename); 

który czuje się dla mnie spokojniejsza, ale łamie "symetrię" mechanizmu ładowania/zapisywania (czy jest to nawet sensowne/warte uwagi)?

Przypuszczam, że prośba o "najlepszą" odpowiedź jest nieco naiwna. Naprawdę staram się lepiej zrozumieć problemy, które tu się pojawiają.

P.S. To jest moje pierwsze pytanie na temat SO, więc jeśli nie przedstawiłem go poprawnie, proszę dać mi znać, a ja postaram się uczynić problem jaśniejszym.

+0

Witamy. Aby sformatować jako kod, wcinasz sekcję kodu o 4 spacje lub 1 kartę. Zobacz http://stackoverflow.com/editing-help. – kennytm

+0

Dzięki Kenny, byłem * pewien * Brakowało mi sztuczki z formatowaniem tam! –

+3

Powinieneś używać krótszych nazw. Na przykład. po prostu zapisz i wczytaj, ponieważ są już w klasie. Nie każdy korzysta z Intellisense :) – Tronic

Odpowiedz

1

Powinieneś rozważyć użycie funkcji serializacji Boost.Serialization style, która unika oddzielnych funkcji do zapisywania i ładowania (nawet jeśli nie korzystasz z samej biblioteki).

W tym podejściu można przekazać funkcję dowolnego typu obiektowi, który ma operatora &, aby wykonać operację na wszystkich zmiennych członkowskich. Jeden taki obiekt może zapisać dane do pliku, inny może załadować z pliku, trzeci może wydrukować dane na konsoli (do debugowania itp.).

Jeśli chcesz zachować oddzielne funkcje, lepszym rozwiązaniem będzie posiadanie ich jako elementów niestatycznych. Dla funkcji zapisywania jest to oczywiste, ale ładowanie to inna sprawa, ponieważ trzeba skonstruować obiekt. Jednak całkiem często ładowanie odbywa się domyślnie-konstruując, a następnie wywołując funkcję niestatycznego elementu ładującego, z powodów symetrii, jak sądzę.

Posiadanie ładowania jako funkcji, która zwraca nowy obiekt, wydaje się być lepsze pod pewnymi względami, ale musisz zdecydować, w jaki sposób zwróci obiekt. Czy jest przydzielany przez nowy, czy po prostu zwracany przez wartość? Zwracanie przez wartość wymaga, aby obiekt był kopiowalny, a zwracanie wskaźnika nakazuje schemat zarządzania zasobami (nie można po prostu przechowywać obiektu na stosie).

+0

Dobre połączenie w serializacji. Nie jest trudno przetasować własne serializacje, jeśli z jakiegoś powodu nie lubisz boostów. @Rodion, Rozważ utworzenie konstruktora lub inicjowanie funkcji, która przyjmuje nazwę pliku jako argument, jeśli chcesz uniknąć dodatkowych kopii. Możesz zachować swój ładunek lub deserializować funkcję jako pomocnika. – thebretness

+0

Popatrzę na bibliotekę serializacji, brzmi to użytecznie. Niestety, mój szef ma "nie wierzę w hype" w stosunku do OOP iw zasadzie prawie wszystko, czego nie zakodowałeś osobiście, dlatego używam podstawowej struktury load/save. Twoje punkty na ładunek/save prawie pasują do moich uczuć. Zamierzam wybrać ładunek niestatyczny/zapisać. Co do tego, co powrócić, gdy używasz statycznego obciążenia, myślę, że powracanie przez wartość jest najlepsze. Tak jak mówisz, przekazywanie wskazówek dyktuje twoją metodę zarządzania resouce, która sprząta twój projekt nad czymś całkiem nieistotnym. –

Powiązane problemy