Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: PHP OOP Jedna instancja klasy w nowoczesnym programowaniu.
Forum PHP.pl > Forum > PHP > Object-oriented programming
Fred1485
W dobie "nowoczesnego programowania", gdzie Singletony są uważane za zło jak rozwiązalibyście Panowie/Panie taki problem?

Mam jedną klasę abstrakcyjną, po której dziedziczą dwie pochodne. Istnieje także klasa pomocnicza, która nie wykonuje dużo pracy, lecz przy tworzeniu instancji pewne czynności są wykonywane.
Klasy pochodne mają dostęp do klasy pomocniczej poprzez prywatne właściwości. Jednak przy tworzeniu nowych instancji tych klas stworzona zostanie też nowa instancja klasy pomocniczej. Nie ma nic złego w tym, że tych kilka egzemplarzy będzie, lecz gdy klas pochodnych będzie około 30 to niepotrzebie w konstruktorze klasy pochodnej będą wykonywane działania spowolniające troszkę system. Wiadomo nie będzie to kosmiczna liczba sekund, pewnie nawet nie do zauważenia dla normalnego użytkownika, ale po co uczyć się złych nawyków. Słyszałem o Service Containerach itp. ale projekt jest malutki. Nie wiem czy się na to porywać.
viking
Sprawdź jak ci się zmieni czas wykonywania po zastosowaniu SM i czy będzie się lepiej pracować. Możesz użyć https://github.com/zendframework/zend-servicemanager (w zależnościach tylko Container Interop).
Minus. Trzeba trochę czasu poświęcić na naukę i zapoznanie się z dokumentacją. Plus. Jedna instancja klasy, którą można dowolnie manipulować (abstrakcyjne fabryki, delegatory), nowoczesne, świetne do testów.
Fred1485
Zerknę w wolnej chwili. Dzięki.
Pyton_000
Dependency Injection
viking
Jedno z drugim bardzo dobrze współgra.
Fred1485
To jeszcze wykorzystam ten post, żeby o coś zapytać. Sprawa trywialna, jednak jak to zrobić najlepiej. Korzystając z takiego czy innego Service Managera, gdzieś w aplikacji trzeba umieścić plik ładujący poszczególne serwisy i zwracający instancję Managera. Przy malutkim projekcie, dajmy na to paczkę napisaną przy użyciu Composera dostępną dla ogólu, gdzie liczy się prostota ciężko wymagać od użytkownika, żeby includował jakieś tam pliki dodatkowo. Przy rozpoczęciu pracy z paczką interesuje go głównie 4/5 klas dostępnych , które robią główną robotę. Cały Service Manager powinien być ładowany po cichu w tle. Może pytanie głupie, wręcz śmieszne może się wydawać, ale jak to najlepiej zrobić? Użytownik powinien dostać gotowy SM.
viking
Porządnie napisany projekt powinien implementować https://github.com/container-interop/container-interop i użytkownika interesuje tylko $container->get/has. Gdzie dodasz config to już kwestia albo samego użytkownika, albo wymuszenia automatycznego wczytywania configa. W takim ZF3 albo Expressive konfiguracja leci z automatu z folderu config/autoload
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-2019 Invision Power Services, Inc.