No więc potrzebuję rady przy tworzeniu DAO operujących na bazie danych. Załóżmy, że mam dwie klasy:
- Row
-
Rows_List implements \Iterator
Statyczna metoda Row::find($id) wywołana z parametrem int szuka w bazie danych (SELECT *) wiersza z podanym ID, jeśli nic nie znaleziono zwraca null, inaczej zwraca zainicjowany obiekt klasy \Row\.
Klasa Rows_List przechowuje obiekty klasy Row. Nie bardzo wiem, jak ją zaimplementować.
- Niektóre klasy pobierają "z góry" wszystkie ID, po których będą iterować, następnie po prostu zwracają Row::find(obecny ID). Co jednak, jeśli w bazie danych jest milion albo i więcej wierszy, który spełniają początkowy warunek? Pobieranie i przechowywanie ich wszystkich chyba zaprzecza sensowi stosowania iteratora...
- Moim pomysłem jest z każdą iteracją pobieranie nowego ID z offsetem zwiększonym o 1. Tutaj też mam jednak pytania. Czy to nie będzie "zarzynanie" bazy danych? Tym bardziej, że najpierw obiekt klasy Rows_List zapyta o ID obiektu, następnie Row zapyta o parametry do inicjalizacji.
- Kolejną metodą może być pobieranie listy ID przez obiekt Rows_List w porcjach po, powiedzmy, 100. Może to być bardziej skomplikowane ale być może lepsze?
Proszę o opinie ;)