Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Singleton raz jeszcze
Forum PHP.pl > Forum > PHP > Object-oriented programming
albrzykowski
Witam,

Staram sie pogłębić swoją wiedzę na temat tego wzorca. Albo nie udało mi się trafić na dobre źróła, albo nie jest on dobrze opisany. Mam tu na myśli nie sposoby implementacji, bo tych jest bardzo wiele, bardziej natomiast interesuje mnie kwestia uznawania (nie ogólnie) Singleton-a za antywzorzec. Aby nie okazalo się zaraz, że jestem kompletnie nieobeznany z google, dodam, że wpisując w polską wyszukiwarkę singleton+ antywzorzec oczywiście zwracanych jest wiele wyników. Żaden jednak nie opisuje broblemu naprawdę szczegółowo, pomijając już kwestię przedstawienia w solidny, rzeczowy sposób alternatywnych rozwiązań.

Będę wdzięczny za Wasze opinie, linki do tematów etc.

Pozdrawiam.
Crozin
Cytat
Mam tu na myśli nie sposoby implementacji, bo tych jest bardzo wiele
Akurat w przypadku singletona nie potrafię sobie wyobrazić innej implementacji niż "standardowa".

Co do "antywzorca". Singleton to tak w gruncie rzeczy "obiektowa reprezentacja zmiennej globalnej", a te jak dobrze wiadomo to w pewnym sensie zło wcielone. Możliwość uzyskania dostępu do obiektu z każdego miejsca aplikacji może (nie musi) powodować wiele "złych zjawisk" (że to tak dziwnie ujmę).
destroyerr
Dodatkowo stwarza problemy podczas testowania.
Co do alternatywnych rozwiązań to np. Inversion of Control.
mike
Przecież Wikipedia jasno wypisuje problemy, których Singleton nastręcza.

Cytat(destroyerr @ 11.03.2010, 18:04:08 ) *
Co do alternatywnych rozwiązań to np. Inversion of Control.
IoC nie jest żadną alternatywą dla Singleton'a. Przecież to są kompletnie różne rzeczy.
destroyerr
Może napisałem zbyt ogólnie, więc wytłumaczę o co mi chodziło. DI jest jedną z implementacji IoC, a przy pomocy DI można zastąpić Singleton - tworząc jeden obiekt i przekazując go do innych obiektów, zgodnie z ich odpowiedzialnością. Pozbywamy się "obiektowej realizacji zmiennej globalnej" i można zacząć testować. Może to założenie, że skoro da się to załatwić z DI, to każda implementacja IoC to załatwi było błędne.
Tak to rozumiem, uważam, że jest to alternatywne rozwiązanie. Jeśli jednak nadal się pogrążam to chętnie dam się naprostować.
wookieb
Nazywając singletona antywzorcem iż jest "zastępstwem" zmiennej globalnej, antywzorcem powinniśmy tak nazwać również Factory (jeżeli jest statyczne) oraz Registry (jeżeli jest statyczne).

Co do IoC irytuje mnie jedna rzecz, że pomimo tego iż ten wzorzec jest znany od dawna to nagle wszyscy się budzą i doznają wielkiego oświecenia, jakie to jest fajne. Czekam tylko jeszcze na to, jak ktoś powie o możliwości stworzenia dobrego EventDispatchera to będzie kolejny okres "odrodzenia" dla phpowców.
Cysiaczek
@albrzykowski - na forum są minimum 2-3 tematy wyczerpujące interesujące ciebie zagadnienie. Jest tam o zastępnikach i o antywzorcowatości Singletona.

@wookieb - ciekawe, ile osób też to widzi. Używam MVC, znam CMS - jestem na topie, modny i podążam za nowościami . Nie znam tego nowego MVC, ale chcę się nauczyć, bo dobre jest podobno. Słyszałem, że popularny jest Singleton, więc chcę zacząć go używać snitch.gif
mike
Cytat(Cysiaczek @ 12.03.2010, 09:21:13 ) *
@wookieb - ciekawe, ile osób też to widzi. Używam MVC, znam CMS - jestem na topie, modny i podążam za nowościami . Nie znam tego nowego MVC, ale chcę się nauczyć, bo dobre jest podobno. Słyszałem, że popularny jest Singleton, więc chcę zacząć go używać snitch.gif
Takie koszta niskiego progu wejścia w PHP. Byle kto, może nagle pisać stronki bo wystarczy mu do tego trochę HTML'a i trochę PHP.
Żadnego przygotowania z teorii, algorytmiki, e.t.c. I później mamy ignorantów szukających szybkich efektów bez wysiłku.
wookieb
Cytat(mike @ 12.03.2010, 09:58:13 ) *
Byle kto, może nagle pisać stronki bo wystarczy mu do tego trochę HTML'a i trochę PHP.
Żadnego przygotowania z teorii, algorytmiki, e.t.c. I później mamy ignorantów szukających szybkich efektów bez wysiłku.

Podłączam się.
Niestety nie chodzi tylko o programistów ale także o większość firm zajmujących się tym zagadnieniem.
Dodatkowym problemem jest jeszcze oczywiście lenistwo i cięcie kosztów, przez co wszyscy spotykamy prawie na każdym kroku kupę nad która można najwyżej popłakać.
albrzykowski
Dzięki za wypowiedzi,

@Cysiaczek - wiem, że są tematy, niemniej być może nie trafiłem na żaden traktujący o tym bardziej poważnie. Niestety większość kończyła się albo luźnymi spostrzeżeniami, albo rozmowa schodziła (podobnie jest w tym wątku) trochę z tematu.

Z ciekawych propozycji natrafiłem na tą:
http://forum.php.pl/index.php?s=&showt...st&p=618559, niemniej też nie została zbytnio skomentowana.

Pracując do tej pory miałem kontakt (jeśli chodzi o poważniejsze rozwiązania) z ZF, Symfony, eZ Publish (pomijam Drupala ze względu na jego "specyficzną" podejście do OOP) i wszystkie powyższe korzystają z Singleton-a.

Podtrzymuję prośbę z mojego pierwszego postu, odnośnie konkretniejszych przykładów alternatywy dla Singleton-a zamiast teoretycznych rozważań.
Crozin
Cytat
(...) wszystkie powyższe korzystają z Singleton-a.
I co z tego? To, że coś jest popularne nie oznacza, że jest dobre. Swoją drogą... w najnowszym Symfony (chodzi w sumie o wersję 2.0) nie widzę by z niego korzystano - chociaż nie sprawdzałem "ręcznie" każdego pliku, więc mogło coś mi umknąć.

Cytat
Podtrzymuję prośbę z mojego pierwszego postu, odnośnie konkretniejszych przykładów alternatywy dla Singleton-a zamiast teoretycznych rozważań.
To daj konkretny przykład, gdzie używasz singletona i chciałbyś go wyeliminować tą alternatywą.
mike
~albrzykowski musisz sobie uświadomić, że mówimy tutaj o wzorcach projektowych. Nie możesz więc odrzucać teorii bo tymże są właśnie wzorce.
Wzorzec jest to typowe rozwiązanie danego zagadnienia. Typowe czyli wypracowane na przestrzeni dłuższego czasu, wyrosłe z doświadczeń wielu ludzi.

Jeśli więc pytasz ogólnie o to czym można zastąpić Singletona, to bez uszczegółowienia przypadku użycia tego wzorca nikt Ci nic ciekawego nie powie.
albrzykowski
@Crozin - odnośnie SF, to nie wiedziałem, i pewnie postaram się dowiedzieć więcej na ten temat.
@mike - to prawda, założenia są tylko teoretyczne niemniej ciekawi mnie samo zastosowanie w praktyce alternatywnych rozwiązań.

Przyznam, że ze wszystkich podstawowych wzorców, ten przysparza mi najwięcej bolączki, choć może wydaje się najbardziej podstawowy poznawany w pierwszej kolejności.
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-2024 Invision Power Services, Inc.