Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

> Rejestr vs Singleton vs global, co jest lepsze
LEW21
post 21.07.2007, 19:22:47
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 31.01.2007

Ostrzeżenie: (0%)
-----


Singleton to takie zmienne superglobalne, utrudniające dodatkowo podmianę pojedynczego komponentu systemu na inny. Jeżeli po prostu użyć zmiennych globalnych (albo nawet rejestru) można przypisać do danej zmiennej/pozycji instancję dowolnej klasy o dowolnej nazwie która ma po prostu określony API współpracujący z danym komponentem. Jeżeli jednak system używa Singletonu to nie jest to możliwe - konieczna jest albo modyfikacja danego komponentu albo utworzenie nowej klasy o nazwie takiej, jakiej rząda ten komponent.

Rejestr działa identycznie jak zmienne globalne, ale jest dużo mniej wygodny w obsłudze i na dodatek jest wolniejszy niż wbudowane w PHP zmienne globalne.

Zmienne globalne też jakimś idealnym rozwiązaniem nie są, ale lepszego po prostu w PHP nie ma. Dlatego właśnie ich używam.

@bim2 @BTW: tak

Ten post edytował LEW21 21.07.2007, 19:23:39


--------------------
Przyjazne użytkownikom polskie wsparcie phpBB3 - phpBB3.PL
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cysiaczek
post 21.07.2007, 21:54:22
Post #2





Grupa: Moderatorzy
Postów: 4 465
Pomógł: 137
Dołączył: 26.03.2004
Skąd: Gorzów Wlkp.




@LEW21 - Odnoszę wrażenie, że nie widzisz zalet rejestru, bo mówisz jedynie o transportowaniu obiektów, czy innych danych (np. konfiguracyjnych). Rejestr ma tą przewagę nad gołymi zmiennymi globalnymi, ze można skutecznie zwiększyć jego funkcjonalność. Można np. składować obiekty jakiegoś konkretnego typu i nie trzeba za każdym razem sprawdzać - poprzez np. instanceof -, czy obiekt jest żadanego typu, czy nie. Tak samo z dodawaniem obiektów do rejestru - metoda dodająca (setter) może automatycznie sprawdzać typ przekazanego obiektu i umieścić w odpowiedniej kolekcji (zyskujemy kategoryzację), albo wręcz go wymusić w swojej definicji i wypluć wyjątek, gdy spróbujemy wprowadzić zły obiekt. Łatwo też sobie wyobrazić, że możemy kontrolować dostęp do obiektów, a nawet możemy filtrować, logować i wykonywac dziesiątki innych operacji, których nie zrobimy w podobnie łatwy i intuicyjny sposób z użyciem globali. Co do API; dlaczego uważasz, że rejestr nie jest przenośny? Ja uważam wręcz odwrotnie - bez rejestru ciężko utrzymac spójność interfejsu - np.
  1. <?php
  2. $registry->get('userAccountInfo', $user)->getAccountExpireDate(); // przekazujemy nazwę klucza i obiekt klasy User, //który posłuży do naszej identyfikacji
  3. ?>

Jako, że rejestr może z powodzeniem byc singletonem (bo jest wzorcem o szerszej defnicji, więc może składać się z innych wzorców), musisz jedynie pobrać jego instancję i wywołać określoną metodę. W Świecie, w którym niemal każda poważna aplikacja to swego rodzaju instancja jakiegoś frameworka - nie jest to wada, bo uczestniczy się w pewnej konwencji, więc dwie akcje nie będą używały róznych interfejsów - każda pobierze instancję rejestru i zrobi swoje.

Pozdrawiam.


--------------------
To think for yourself you must question authority and
learn how to put yourself in a state of vulnerable, open-mindedness;
chaotic, confused, vulnerability, to inform yourself.
Think for yourself. Question authority.
Go to the top of the page
+Quote Post

Posty w temacie
- LEW21   Rejestr vs Singleton vs global   21.07.2007, 19:22:47
- - Cysiaczek   @LEW21 - Odnoszę wrażenie, że nie widzisz zalet re...   21.07.2007, 21:54:22
|- - LEW21   Cytat(Cysiaczek @ 21.07.2007, 22:54:2...   21.07.2007, 23:02:21
- - x3m   CytatDodajmy jeszcze że ten kod wygląda strasznie,...   22.07.2007, 18:29:43
- - menic   A nie lepiej po prostu przekazywać to co nam potrz...   22.07.2007, 19:44:17
- - LEW21   x3m, jeżeli programista zna kod skryptu, to nie zr...   22.07.2007, 23:20:19
- - Turgon   LEW21, takie pomyłki wynikają bardzo często... bar...   23.07.2007, 09:46:27
- - kwiateusz   Lew przy Twoim założeniu każdy programista pracują...   23.07.2007, 12:29:02
- - LEW21   Kwiateusz, bo wygenerowanie jakiejś listy globali ...   23.07.2007, 13:26:49
- - thornag   Hmm niedawno zaczalem pracowac w zespole gdzie pop...   23.07.2007, 13:38:48
- - UDAT   Najpierw chwila polemiki: @LEW21 CytatMusiałbym pr...   23.07.2007, 14:13:08
- - LEW21   thornag, nie można przesadzać ani w jedną ani w dr...   23.07.2007, 20:21:20
|- - thornag   Cytat(LEW21 @ 23.07.2007, 20:21:20 ) ...   24.07.2007, 08:38:08
- - EuReKa   Cytat(thornag @ 24.07.2007, 09:38:08 ...   24.07.2007, 14:28:17
|- - Sedziwoj   Cytat(EuReKa @ 24.07.2007, 15:28:17 )...   24.07.2007, 20:06:45
|- - LEW21   Cytat(Sedziwoj @ 24.07.2007, 21:06:45...   25.07.2007, 00:15:44
- - Sedziwoj   @LEW21 Nie będę Cię przekonywał, życie to zrobi ja...   25.07.2007, 06:26:06
- - Turgon   Ja sam doszedłem do wniosku. Mam gdzieś wszystkie ...   27.07.2007, 16:58:57
- - Kodie   Osobiście wydaje mi się, że używanie zmiennych glo...   29.07.2007, 16:22:39
- - Athlan   Registry to swego rodzaju singletony zrobione z in...   21.08.2007, 16:10:14
- - zimi   zaczęło mnie ostatnio dręczyć jedno pytanie, jaka ...   23.08.2007, 15:19:58
- - NuLL   A wiesz jaka jest roznica pomiedzy metodami statyc...   27.08.2007, 18:49:06
- - msulik   Myślę, że zimiemu chodziło o Paamayim Nekudotayim ...   28.08.2007, 09:04:16
- - Cysiaczek   @msulik - to zależy, co kto woli. Nic jednak nie s...   28.08.2007, 10:11:37
- - zimi   @NuLL: ogólnie pojęcie "dynamiczne metod...   28.08.2007, 21:22:54
|- - MalCom   Cytat(zimi @ 28.08.2007, 22:22:54 ) s...   28.08.2007, 21:42:12
- - wrzasq   @zimi: w Javie nie ma zadnych przedrostkow przed z...   28.08.2007, 22:13:48
|- - MalCom   @wrzasq: Ale jakby nie patrzec sa az 3 operatory d...   28.08.2007, 22:24:11
- - zimi   Cytatw PHP musi byc wyraznie powiedziane, czy odwo...   28.08.2007, 22:33:59
- - Cysiaczek   Cytatmógłbyś rozwinąć? nie bar...   29.08.2007, 06:45:12
- - msulik   Cytat(zimi @ 28.08.2007, 22:22:54 ) @...   29.08.2007, 12:48:40
- - Sh4dow   Cytat... Czy ktoś może wie, jak się nazywa konstru...   4.09.2007, 14:07:53
- - zimi   CytatCos takiego mozna wykozystac jako magazyn, al...   5.09.2007, 20:44:42


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 19:44