KrulTibianus Temat założony przez niniejszego użytkownika |
C++ Tekstowa baza danych - pomoc w rozgryzieniu problemu » 2018-08-27 16:25:49 Cześć. Mam do zrobienia bazę danych bez używania zewnętrznych narzędzi typu SQL. Widok konsolowy. W poleceniu mam zadane, że program ma być podzielony na klasy w następujący sposób: -klasa widoku Interfejs -klasa zarządzająca bazą Database -klasy podstawowe Klient(dziedziczy po Osoba), Pracownik(dziedziczy po Osoba), Pojazd, Przesyłka, Umowa. Każdy z obiektów klas ma swoje ID i inne pola. -klasy tabelowe Klient_Table, Pracownik_Table, Pojazd_Table, itd.
Wstępnie planuję takie działanie - ekran logowania pracownika - załadowanie danych z plików txt do pamięci - wyświetlenie menu - pracownik uzyskuje dostęp do bazy i ma możliwość dodawania/usuwania/modyfikacji klientów, pracowników i pojazdów, a także dodawania nowych przesyłek oraz umów. Oczywiście ma możliwość odczytu danych, do tego może przeszukiwać rekordy (będę używać regexów), np. chcąc znaleźć przesyłki przewożone przez Pojazd X, program przeszuka "Umowa_Table" (Umowa zawiera Klienta, Pracownika, Przesyłkę, Pojazd przewożący) i wyświetli coś w stylu: "Przesylki przewiezione przez samochod X: id_przesyłki1 nazwa_przesyłki1 id_przesyłki2 nazwa_przesyłki2" Po zakończeniu wszelkich czynności, przy wylogowaniu, program zapisuje wszystkie zmiany do plików. Wtedy z kolei w przypadku wysypania się programu po iluś modyfikacjach w bazie, modyfikacje nie byłyby zapisane w plikach - jak się przed tym zabezpieczyć?
Czego ogólnie nie rozumiem? Jak logicznie rozdzielić metody na klasy tabelowe i klasę Database.
Po małym researchu znalazłem taki temat http://cpp0x.pl/forum/temat/?id=26389 , gdzie pomocny jest post mateczka (P-167855), który mówi, że metody dodające/modyfikujące/usuwające powinny być nie w klasie "osoba", a w klasie "lista_osob", czyli rozumiem, że w moim przypadku będą one w klasach tabelowych. Czy metody wyszukujące po regexie też mają być w klasach tabelowych, czy w Database? Ogólnie, jeśli dobrze rozumuję, to te klasy tabelowe mają zawierać tylko jedno główne pole, np. Pojazd_Table ma mieć pole "list<Pojazd> listapojazdów", do którego ładowane będą rekordy z pliku "pojazdy.txt" (ewentualnie jakieś dodatkowe, jeśli będą potrzebne)? Metody odczytu/zapisu z plików lepiej by były właśnie w klasach tabelowych, czy w Database? Jakie potencjalne metody w takim razie pozostaną dla klas podstawowych? Czy klasy podstawowe są po prostu podstawką dla klas tabelowych, bo klasa podstawowa tylko reprezentuje jeden rekord z klasy tabelowej - jest elementem jej listy, tak? Czy bardziej elementem listy będzie pojedynczy rekord (linia) wczytany z pliku, a klasa podstawowa ze swoim konstruktorem bierze udział tylko przy dodawaniu nowego elementu do tabeli (listy klasy tabelowej)? Czy ktoś widzi tutaj zastosowanie dla szablonu klas/funkcji? Czy mógłbym zrobić w klasie Database np. szablon funkcji dodawania nowego elementu do bazy, który sprawdzałby jakoś przyjęty parametr (np. Klient) i w zależności od przyjętego obiektu wprowadzałby go do odpowiedniej klasy tabelowej? Tak samo wydaje mi się, że podobnie mógłby działać szablon odczytu (i następny szablon zapisu) odpowiednich plików?
Sorry, że tak rozlegle, ale błądzę po tej abstrakcji i tylko coraz więcej pytań się rodzi. :P |
KrulTibianus Temat założony przez niniejszego użytkownika |
» 2018-08-27 19:37:35 Dzięki za odzew. Właśnie przez to, że mam operować na plikach txt, a baza nie ma być ogromna, dostałem zieloną lampkę na wczytywanie jej do pamięci, co byłoby dla mnie prostsze. Rozumiem, że to zła praktyka i prawdziwa baza danych uzyskuje dostęp do danych w czasie rzeczywistym. Głównym zamysłem postu było dowiedzenie się, jak logicznie rozdzielić metody po klasach tabelowych, a czym ma zarządzać główna klasa database, mógłbyś się do tego odnieść? |