Wpis z mikrobloga

@nudnyuser: PHP ma problemy ze scope, za to nie ma wielowątkowości, a każdy skrypt ma własne śrofowisko uruchomieniowe - i na pewno będą występować pojedyncze globalne obiekty typu połączenie do bazy danych i ich realizacja inaczej niż przez singleton jest tylko ukryciem stałego dowiązania pod dodatkową warstwą abstrakcji, która i tak stwarza tylko problemy.
  • Odpowiedz
@koob: Każdy kto tak mówi po prostu jeszcze nie dotarł do momentu w którym singletony naprawdę sprawiają kłopoty. Ze względu na singletony właśnie porzuciłem Kohanę, bo może to i pozornie wygodne było ale niestety później testowanie i utrzymanie takiego kodu sprawia generalnie dużo problemów. A dobre opanowanie DI pozwala na dostęp do potrzebnych elementów równie łatwo jak przez singletony bez związanych z nimi problemów.
  • Odpowiedz
@singollo: Każdy kto naparza masowo singletony uznając je za panaceum na wszystko

"jeszcze nie dotarł do momentu w którym singletony naprawdę sprawiają kłopoty"


A za to tak mówi ktoś, kto uważa, że singleton = "jakaś regułka" czyli klasa z jedną instancją w static.

Singletony są spoko i wcale to nie musi być statyczne pole by nazwać to singletonem, dopóki masz i możesz mieć jedną instancję obiektu w środowisku, w którym
  • Odpowiedz
@MacDada: Pierwsze słysze o singletonie z małej i z dużej litery, nie rozpędzajmy się w tworzeniu jakiś pojęć, bo czym dla Ciebie jest "Singleton"? w przeciwieństwie do " posiadanie obiektu w jednym egzemplarzu podczas trwania programu".
  • Odpowiedz
@hbpitero: Staram się w ten sposób rozróżniać „singleton jako pojęcie” i „singleton jako wzorzec” – nie wymyśliłem, ale widziałem na jakiejś prezentacji pracowników Google'a.

Tak czy siak, „signleton” jako „pojęcie” jest OK, gdy jako „wzorzec” już nie za bardzo ;)
  • Odpowiedz
@MacDada: Tylko, że czym jest dla Ciebie "wzorzec singleton" ? bo dla mnie po prostu "obiekt który mamy w jednym egzemplarzu", to jest sensem tego wzorca - posiadanie w jednym egzemplarzu. wzorzec != konkretny kod.
  • Odpowiedz
@MacDada: Dependency Injection to fajny wzorzec, ale singletona, niestety, nie zastąpi - a przynajmniej nie dla każdego zastosowania. Singleton jest najskuteczniejszy zwłaszcza w tych sytuacjach, gdy rzeczywiście reprezentuje pojedynczy zasób, np. połączenie z bazą danych.

Inna sprawa, to skuteczne odpowiednie zastosowanie tegoż, bo jeśli każde odwołanie do bazy danych wygląda np tak:

$query = new ZendDbSelect(Database::getInstance()->getDbAdapter()), i takiego Database::getInstance() mam w kodzie w 500 miejscach, to może człowieka
  • Odpowiedz
@hbpitero: Dobra, to jeszcze inaczej się wyrażę. Za słowem „singleton” kryją się z reguły dwa sposoby rozumowania:

1. sytuacja, w której chcemy mieć jeden wspólny obiekt w ramach działania programu (to nazywam „pojęciem”, „słabym singletonem”, „singletonem”),

2. „implementacja” powyższego (to nazywam „wzorcem”, „silnym singletonem”,
  • Odpowiedz