Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dobra alternatywa dla Singleton
grzesiek_g
post
Post #1





Grupa: Zarejestrowani
Postów: 249
Pomógł: 30
Dołączył: 18.07.2007

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


Witam

Mam do napisania klasę (zbiór klas) która będzie odpalona gdzieś na początku kodu. Obojętnie czy to będzie pojedynczy plik php, czy Bootstrap frameworka.

Wymagania:
  • tylko jedna instancja na całe wywołanie
  • dostęp z dowolnego miejsca w kodzie
  • brak zależności od innych klas, nie chcę instalować dodatkowych zależności jak np PHP DI
  • maksymalna uniwersalność, ma działać zarówno z kodem PHP 5.3 jaki i 7.1+

Od razu nasuwa się myśl wykorzystania Singleton, ale ponieważ jest to antywzorzec szukam lepszego rozwiązania.
Najlepiej jakby dało się zrobić coś takiego w wywołaniu:
  1. MyClass::init($config);
  2.  
  3. // w innym pliku
  4. MyClass::setConfig('key', $value);
  5.  
  6. // lub
  7. MyClass::action($parameters);


Mogę prosić o jakieś sugestie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Potrzeba użycia globala świadczy o złej architekturze aplikacji, nie nadrobisz złej architektury naszym geniuszem (IMG:style_emoticons/default/Lkingsmiley.png)
Jak potrzebujesz używać singletona to go używaj, po co robić obejście dla obejścia? Pierwsze obejście zasad obiektowości - używanie globala by obejść hermetyzację, po co kolejne obejście singletona? Ma to sens na zdrowy rozsądek? Złe + złe nie równa się dobre (IMG:style_emoticons/default/businesssmiley.png) W ten sposób powstają coraz to gorsze "potwory" (IMG:style_emoticons/default/baaasmiley.gif)
A dobrą alternatywą będzie dobre zaprojektowanie kontekstu aplikacji i jego wstrzykiwanie (lub zaimplementowanie jako warstwa abstrakcii) do odpowiednich miejsc.
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 11:31