Na poczatek, co by nie byc posadzony o plagiat


Na poczatek moze diagram mojego rozwiazania
Diagram klas
(uml znam slabo wiec pewnie sa bledy w diagramie jesli chodzi o oznaczenie relacji)
Co do kodu to znajduje sie on tutaj: (podaje linki bo kodu jest za duzo na wklejanie)
Klasa DB -glowna klasa bazy danych
Db_result - abstrakcyjna klasa wyniku zapytania
Db_Result_orig - wynik zapytania wykonanego z bazy
Db_result_cache - wynik zapytania wykonanego z cachu (lub z bazy z pozniejszym cachowaniem)
GenericException - Rozszerzenie klasy Exception o zapis wyjatkow do loga
PGException - klasa wyjatku bazy danych
Klasy dodatkowo korzystaja z kilku stalych (np. connection string, sciezka do katalogu z cachem itp), ktore
trzymam w osobnym pliku -> gdyby ktos chcial przetestowac na zywo dzialanie klasy to trzeba odpowiednie pliki wygenerowac wraz ze stalymi.
Najwazniejsze cechy moich klas to:
- cachowanie zapytan do pliku tekstowego / odczytywanie zapytan z takiego cachu
- system obslugi wyjatkow z zapisem bledow do logow
- mozliwosc iterowania wyniku - zastsowany interfejs iteratora
Jako ze jestem poczatkujacy prosze o ocene kazdego aspektu, ktory przyjdzie wam do glowy - poczynajac od kodu a na organizacji projektu konczac - kazda rada / wytkniecie bledu mile widziane.
Przykladowe zastosowanie
<?php include_once ('db/db.class.php'); include_once ('const_db.php'); $sql='select * from produkty'; try { $db=Db::getInstance(); } catch (Exception $e) { } try { //odczyt zapytania z cachu. Jesli brak cachu dla zapytania to odczyt z bazy //nastepnie cachowanie jest zapisywane // 2 parametr mowi ze wynik ma byc jako tablica asocjacyjna, 3 parametr //mowi ze cache bedzie wazny przez godzine (3600 sekund) - oba parametry sa opcjonalne foreach ($db->query_cache($sql, true, 3600) as $row) { } } catch (Exception $e) { //wyswietla pelen opis bledu wraz z zapytaniem i opisem bledu //uzywac tylko przy testowaniu - w kodzie produkcyjnym raczej //nie powinno sie znalezc gdyz haksior moze poznac strukture bazy $e->toScreen(); } try { //przyklad uzycia zapytania bez cachowania (drugi parametr oznacza odczyt numeryczny) foreach ($db->query_db($sql,false) as $row) { } } catch (Exception $e) { } //oczywiscie mozna rowniez odczytywac pojedyncze wyniki $result=$db->query_cache($sql); //odczyt 4 wiersza $row=$result->fetch_row(3); ?>