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.
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 |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 442 Pomógł: 0 Dołączył: 27.12.2005 Ostrzeżenie: (0%)
|
Najpierw chwila polemiki:
@LEW21 Cytat Musiałbym przekazać $filesystem (moja klasa dzięki której zabawa z systemem plików jest obiektowa i banalna (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ), $activeUser, $output, $db (to taki przykład, osobiście z tego nie korzystam - trzymam dane w plikach XML) i jeszcze całą masę innych klas, a jak bym się pomylił w kolejności to skutki byłyby opłakane (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Od czego jest type hinting? @Cysiaczek Cytat 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.
A skąd pobierzesz instancję rejestru - z innego rejestru? Tworzenie specjalizowanych getterów i setterów spowoduje powstanie God Object(antywzorzec) i nie poprawia architektury aplikacji. Także zrobienie Fabryki rejestrów wydaje się trochę poronione, z których pobierałbyć odpowiedni rejestr. Czyli coś takiego:
Natomiast umożliwienie korzystania z setterów powoduje że mogę np. jakiejś klasie niechcący ustawić inny obiekt, który będzie miał to samo API, ale będzie to inna zupełnie instancja niezwiązana z poprzednią. Pomyśl np. o zmianie obiektu klasy MySQLSession na XMLSession (czy cokolwiek) w trakcie realizacji żądania. Cytat Ja uważam wręcz odwrotnie - bez rejestru ciężko utrzymac spójność interfejsu - np.
Podejście dobre jedynie do uzyskiwania customizowanych obiektów, jedakże do samego rejestru jako takiego w rozumieniu podanym przez M.Fowlera w PoEAA już nie. ---------------------------------- Teraz moja propozycja: Czy ten temat nie powinien nazywać się "Sposoby realizacji DI"? Jeśli nie to nie ma chyba o czym rozmawiać: global -> zło, Java, C# itd. radzą sobie dobrze bez. singleton -> brak prawa bytu przy użyciu DI / lub rejestru rejestr -> użycie jako prymitywny kontener DI (patrz komentarze powyżej) - nie należy mieszać konfigów z DI. Zamiast rejestru można użyć kontenera DI. Statyczne metody nie są rozszerzalne ( przed PHP6 i __callStatic). SingletonRegistry też nie jest rozwiązaniem, lepsza jest statyczna metoda fabryczna, jednak nie jestem zwolennikiem takiego rozwiązania. W kolejnej odsłonie mojego frameworka chcę użyć normalnego kontenera DI w połączeniu z programowaniem aspektowym i adnotacjami - coś podobnego jak DI w EJB3:
Podobne podejście (annotacje) wykorzystywane jest, o ile pamiętam w PHP'owym frameworku Stubbles, jednak wymaga specjalnego tworzenia obiektów. Moja implementacja pozwalać będzie na transparentne użycie mechanizmu DI - parz. EJB3 - jednak jest to jeszcze kwestia dopracowania. |
|
|
|
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
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 ![]() ![]() |
|
Aktualny czas: 4.12.2025 - 17:48 |