PHP OOP Jedna instancja klasy w nowoczesnym programowaniu. |
PHP OOP Jedna instancja klasy w nowoczesnym programowaniu. |
27.07.2016, 17:00:17
Post
#1
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
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ć. Ten post edytował Fred1485 27.07.2016, 17:00:50 -------------------- |
|
|
27.07.2016, 18:01:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
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. -------------------- |
|
|
27.07.2016, 18:34:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
Zerknę w wolnej chwili. Dzięki.
-------------------- |
|
|
27.07.2016, 20:03:58
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
Dependency Injection
|
|
|
27.07.2016, 21:49:23
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Jedno z drugim bardzo dobrze współgra.
-------------------- |
|
|
28.07.2016, 09:32:12
Post
#6
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 22 Dołączył: 10.02.2015 Ostrzeżenie: (0%) |
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.
-------------------- |
|
|
28.07.2016, 11:21:42
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
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
-------------------- |
|
|
Wersja Lo-Fi | Aktualny czas: 17.04.2024 - 23:11 |