Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Kiedy korzystać z singletona?
Forum PHP.pl > Forum > PHP
Beynar
Ostatnio opanowałem ten wzorzec i napisałem w nim jedną klasę obslugi bazy danych. Bardzo podoba mi się idea singletona i chyba można by ją stosować dużo częsciej ale kiedy tak naprawde wg was singletona powinno się używać a kiedy nie? Największą zaletą jest napewno oszczędność zasobów ale jakie są wady? (napewno jakieś muszą być).

PS. W tej chwili pisze mapper czy modelator (zwał, jak zwał...) klase ktora w całym projekcie będzie mi sprawdzała poprawność napływających z zewnątrz danych. Napewno w konstruktorze będzie zładowanie mapy z pliku - przeczytanie całego pliku - mapy wszystkich zmiennych może zająć troche czasu. Gdybym zrelizował ta klase jako singleton wczytywałbym mape tylko raz....
Cysiaczek
Singleton ma inne zadanie niż Ty mu wyznaczasz. Chodzi tu o dostęp do danych w każdym miejscu systemu. To, że nie będzie Ci wczytywało map da się też osiagnąć bez singletota i to z powodzeniem. Z singletonem musisz uważać, bo to jest ciągle dana globalna, choć ładniejsza i zgrabniejsza. Ja sam mimo, że używam singletona, to i tak tam, gdzie mogę, to przekazuję jego obiekt do innych obiektów. Pod pojęciem musisz uważać mam na myśli spójność projektu.

Pozdrawiam.
Beynar
No tak.... zapomniałem. Przeciesz w singletonie glownie chodzi o globalny dostep do jednej instancji.
Zatem wniosek, ze nalezaloby z niego korzystac kiedy chcemy miec jakis obiekt globalny z ktorego bedziemy korzystac w calym projekcie?
Taki jakby obiekt publiczny - globalny.

Czy sa jakies zagrozenia zwiazne z korzystaniem z singletona?

Mi sie wydaje ze mam conajmniej jedno:
kiedy programista korzysta z obiektu singletona i dalje w kodzie wywola jakas funkcje czy inny obiekt ktory w srodku korzysta z tegoż wczesniej uzwyanego singletona to zostanie on w sordku np. nadpisany innymi danymi. Programista pisze dalej w glownym skrypcie, po wywolaniu jakies metody mysli ze jego obiekt ma wczesniejsze wlasciwosci, z kilku linijek wyzej... jednak linijke wyzej wywolal obiekt ktory zmienil stan singletona.
Wtedy mamy zamieszanie....
Cysiaczek
...Jak zawsze, kiedy używamy danych globalnych. Przejrzyj forum - na tema singletona napisano wiele postów.

Pozdarwiam.
bigZbig
Nie wiem co ten Twój mapper ma dokładnie robić ale jeśli ma odbierać dane dostarczane z zewnątrz to zwykle taka klasa nazywana jest Requestem, a wzorzec singleton świetnie się nadaje do jego implementacji.
Beynar
Moj mapper bedzie dzialal tak

Zewnetrzna mapa zmiennych bedzie w tym formacie:
Kod
string,FIRST_NAME,Imie,2,30,NOT NULL,
string,LAST_NAME,Nazwisko,2,20,NOT NULL,[a-zA-Z'`]
string,EMAIL,Email,4,50,NOT NULL,[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$


Dane naplywajace np. z formow beda podlegaly walidacji i tym wlasnie zajmowac sie bedzie mapper - odczytywaniem mapy i przeksztalcaniem jej do formatu w ktorym moge sprawdzic dana z wyznaczonym modelem danych.
Formularzy bedzie wiele i w roznych miejscach. Wszedzie trzeba bedzie je walidowac - przepuscic przez mapper/modelator i sprawdzic poprawnosc
Wiec singleton chyba bedzie sie nadawal...?
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.