![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z leniwą konkretyzacją (czyli opóźnioną inicjacją niektórych cech obiektów).
Sprawa wygląda tak, że mam kolekcję obiektów -> dajmy na to książek. Kolekcja na początku inicjuje książki -> ale tylko autorów i tytuł ->spis rozdziałów chciałbym aby był inicjowany z "opóźnieniem" - tylko wtedy, kiedy będzie potrzebny. Generalnie wszystko jest proste jeśli rozważamy to z perspektywy jednej książki -> wystarczy stworzyć obiekt, i przy próbie wywołania metody ksiazka->podajRozdzialy - odczytujemy je z bazy i inicjujemy liste rozdzialow. Ja natomiast potrzebuję sposobu, aby w razie próby odczytania spisu treści jednej książki, automatycznie odczytać spisy treści pozostałych książek znajdujących się w kolekcji. Na początku myślałem, że będzi to proste, ale okazuje się, że utknąłem w tym punkcie. Myślałem o wykorzystaniu wzorca obserwatora -> ale tu pojawia się problem, bo każda ksiażka musiałaby mieć referencję do kolekcji książek - co spowoduje zapętlenie -> książka jest elementem kolekcji i jednocześnie kolekcja jest elementem książki... Przyznam się szczerze, że nie próbowałem zapisać kodu tego rozwiązania, więc nie mam 100% pewności, że to by nie działało, ale chyb nie będzie działac... Czy jest jakiś wzorzecz/ metoda, którą mógłbym wykorzystać do obejścia tego problemu. Dodam, że jest to dla mnie bardzo ważne, gdyż przykiład jest uproszczeniem, w moim przypadku, gdyby udało mi się rozwiazać ten problem zaoszczędzę dużo pracy bazie danych. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Ale się porobiło - człowiek zadaje pytanie, wychodzi, wraca a tu czeka gotowiec od moda - rozpuszczanie userów:D
A tak już serio to dokładnie o to mi chodziło. Z tego co widzę, to obiekt Book posiada referencję do BookCollection. Myślałem nawet nad takim rozwiązaniem - ale stwierdziłem, że to się nie może udać... a tu niespodzianka - php nie wpadło w rekurencję. Mike_mech - powiedz mi tylko jeszcze, czy dobrze wnioskuję, ale to jest możliwe dzięki temu, że obiekty book nie zawierają kolekcji tylko wskaźnik na nią? W takim układzie ten przykład działa tylko na php5 bo php4 chyba przekazuej obiekty przez wartość domyślnie(chociaż nie jestem pewien bo nie pisałem w php4)? Piszę na php5 ale tak pytam, żeby się czegoś dowiedzieć. Jeszcze raz dzięki za pomoc - moja baza będzie ci wdzięczna :-) edit Cytat private $arrExampleTitles = array( 'Przygody Nospora Puchatka', 'Dzieci z Bulerbyn', 'Przygody Tolka Banana', 'W Pustyni i w Puszczy' ); (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Ten post edytował athabus 22.08.2006, 21:46:32 |
|
|
![]()
Post
#3
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ale się porobiło - człowiek zadaje pytanie, wychodzi, wraca a tu czeka gotowiec od moda - rozpuszczanie userów:D Raz do roku i moderatorzy mówią ludzkim głosem.A tak już serio to dokładnie o to mi chodziło. Z tego co widzę, to obiekt Book posiada referencję do BookCollection. Myślę, że relacja bedzie tu właściwszym słowem. Referencja za bardzo sie kojarzy ... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Mike_mech - powiedz mi tylko jeszcze, czy dobrze wnioskuję, ale to jest możliwe dzięki temu, że obiekty book nie zawierają kolekcji tylko wskaźnik na nią? Dokładnie takie cos jest proste do zrealizowania jeśli założy się że nie tylko kolekcja wie wszystko o kolekcjonowanych obiektach, ale też obiekty wiedzą co się z nimi dzieje i maja odwołanie do obiektu kolekcji, która je zawiera.Wtedy można zrobić takie obserwowanie, a raczej sytuacje kiedy obiekt mówi kolekcji: "Hej, patrz. Coś się stało. Zareaguj." W takim układzie ten przykład działa tylko na php5 bo php4 chyba przekazuej obiekty przez wartość domyślnie(chociaż nie jestem pewien bo nie pisałem w php4)? Powiem szczerze. Olewam PHP4 i nie interesuje mnie czy to zadziała i jak zadziała (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Już od prawie dwóch lat nie programuję w PHP4. P.S. Mój kod ma bug'a. Praca domowa polega na znalezieniu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Nie byłbym soba jesli bym podał rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Podpowiedź: sprawdź co się stanie jeśli będzie tylko jeden obiekt w kolekcji. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 898 Pomógł: 48 Dołączył: 2.11.2005 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
P.S. Mój kod ma bug'a. Praca domowa polega na znalezieniu (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Nie byłbym soba jesli bym podał rozwiązanie (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Podpowiedź: sprawdź co się stanie jeśli będzie tylko jeden obiekt w kolekcji. No chociaż coś - bo jeszcze by sie userzy rozkaprysili (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Dzięki za pomoc - zabieram się za kodowanie. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 21:38 |