Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: mini cache bazy ;)
Forum PHP.pl > Forum > PHP > Object-oriented programming
ayeo
Witam!
Mam klasę User. Konstruktor tej klasy wypełnia ją danym z bazy na podstawie ID, jeżeli nie przekażemy ID tworzy pusty obiekt (ustawia tylko NAME na ANONIM). Jednak, jak to w życiu bywa, czasami trzeba utworzyć obiekt po loginie. Powiedzmy, że jest klasa UserFactory z metodą statyczną getUserByID(); Metoda ta odpytuje bazę na podstawie loginu po czym zwraca nowy obiekt user z parametrem ID. Problemem jest to, że wykonuje 2 zapytania o dokładnie ten sam wiersz!! To jest bez sensu. W sumie Factory może tworzyć pusty obiekt i wypełnić go ręcznie danymi na podstawie danych z bazy. Ma to jednak pewne minusy smile.gif Mój pomysł polega na tym, że klasa bazy danych zawiera powiedzmy tablice (kilka tablic, dla każdej tabeli osobną) i wypełnia je danymi po każdym selekcie. Tworzy w sensie taką jakby kopie bazy danych (oczywiście tylko tych rekordów, o które i tak pytaliśmy). Teraz przy każdym kolejnym selekcie najpierw sprawdza się czy wszystkie potrzebne dane nie znajdują się jużprzypadkiem w tablicy. No i to tle smile.gif Co o tym myślicie?

BTW fajne są obiekty winksmiley.jpg mogę sobię modelować pewne zachowania, a z poziomu logiki aplikacji poprostu wykonuję jakąś metodę, np delete(). Jeśli chce zachowywać rekordy (w sensie nie usuwać ich definitywnie) w bazie to klasa bazy danych może je poprostu oznaczać jako usunięte, a selecty będą je ignorować. Zmiany wprowadzam tylko w klasie bazy smile.gif To taki troche dziwny przykład, ale właśnie coś takiego mi potzeba dla niektórych tabel winksmiley.jpg
domis86
w UserFactory zrob statyczna tablice:
protected static $cached_by_id = array ();

przy kazdym pobraniu wiersza z tabeli users wez niego id i zapisz ten wiersz w tej tablicy
self::$cached_by_id [ <tu id pobranego wiersza> ] = < tu wiersz >;

i wtedy w funkcji getUserByID() zanim pobierzesz z bazy wiersz to sprawdz czy jest on juz w tej cachującej tablicy smile.gif

dobre nie? party.gif
splatch
Książkowa definicja tego zachowania to identyty map. Polecam ogólnie lekturę czy też przejrzenie katalogu na tej samej stronie. Dla dociekliwych jest również dostępne polskie tłumaczenie smile.gif.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.