Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> PHP OOP Jedna instancja klasy w nowoczesnym programowaniu.
Fred1485
post 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


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 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.


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Pyton_000
post 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
Go to the top of the page
+Quote Post
viking
post 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.


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 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.


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
viking
post 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


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 07:00