Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wzorce fabryki - prośba o wyjaśnienie, opinię
Forum PHP.pl > Forum > PHP
ogar
Przepraszam, że tutaj, ale nie mam uprawnień do pisania w Pro.

1. Robię projekt prostej biblioteki. Zastosowałem factory pattern i factory method do generowania obiektów biblioteki jak: książka, czasopismo, itp. Są one subtypem klasy której obiektu nie można stworzyć, ponieważ nabija ona licznik elementów i ustawia unikalne dane. Dodatkowo mam klasę użytkownik. I tu powstaje dylemat. Elementy biblioteki tworzę przez factory method. Klienta mam jdnego typu, bez subklas, więc nie ma sensu tworzyć żadnej fabryki (chyba, że się mylę), tylko że teraz nie będę mógł tworzyć wszystkich elementów bez podawania ich typu co chyba nie jest dobre.

2. Jeśli zakłądając miałbym rodziny obiektów, które miałbym wygenerować dynamicznie to wtedy powinienem stworzyć fabryki dla każdego typu obiektów? Fabryka z książkami, czasopismami itp., druga z rodzajem użytkowniów itd.?
lukaskolista
Wzorzec fabryki umozliwia lancuchowanie, np.
  1. User::factory('user_name')->edit(array('dane'))->logout();
Innego zastosowania nie widze, poniewaz kazde wywolanie metody factory() powoduje tylko stworzenie nowego obiektu i zwrocenie go. Ponadto kazda metoda, ktora cos robi, a nie zwraca konkretnych danych powinna zwracac $this tak, aby lancuchowanie bylo mozliwe.

W tym przypadku metoda edit moze zwrocic true/false powodzenie/niepowodzenie, ale moze tez rzucic wyjatek podczas niepowodzenia i zwrocic $this. Osobiscie uzywam tego wzorca gdzie sie tylko da, bo taki kod jest dla mnie bardziej przejrzysty, ale sa tez programisci, ktorzy sa przeciwni temu. Musisz sam zdecydowac.
pamil
Wychwalajmy PHP 5.4:
  1. (new AwesomeFactory('awesomeuser'))->methodOne()->methodTwo();
lukaskolista
Nie ma metody factory i tyle, reszta jest taka sama. Wiec co tu wychwalac? Zadna rewolucja.
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.