• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dependency Injection i IoC kilka pytań

VPS Starter Arubacloud
0 głosów
649 wizyt
pytanie zadane 17 lutego 2021 w Algorytmy przez CSSoup Mądrala (6,460 p.)
Ostatnio zacząłem ogarniać temat DI oraz kontenerów i pojawiło się w mojej głowie kilka pytań.

1. Załóżmy, że mam projekt napisany w PHP w oparciu o MVC i wiadomo że różne obiekty składają się z innych itd. W takim razie tworząc kontener IoC, powinienem stworzyć jeden kontener w pliku index.php w który zarejestruje wszystkie zależności i będę go używał globalnie, czy powinienem to rozbić w jakiś sposób?

2. Co w przypadku gdy mając łańcuch zależności, czyli do jednej zależności wstrzykuję inną itd. i w pewnym momencie napotykam zależność, do której podaje parametry zależne od pewnych działań wykonywanych w aplikacji np. zmiana aktualnej strony w obiekcie Paginator. W takim wypadku powinienem jakoś zmodyfikować mój kontener, czy może wstrzykiwać dany obiekt w jakiś inny sposób?

1 odpowiedź

+1 głos
odpowiedź 17 lutego 2021 przez Wiciorny Ekspert (277,600 p.)
wybrane 17 lutego 2021 przez CSSoup
 
Najlepsza

 tworząc kontener IoC,

Ty nie tworzysz kontenera IoC programistycznie, tylko możesz nadać tę właściwość IoC to odwrócenie kontroli, czyli na dany kontener wpyw ma FRAMEWORK, i to ty określasz czy ten framework ma miec wpływ na ten kontener poprzez np adnotacje, czy stosowanie go w projekcie. 
Mozesz tez utworzyc wlasne klasy konfiguracyjne i wtedy niejako ty tworzysz konfiguracje, ale poprzez "meta-dane" adnotacje musisz to wykorzystać, to nie polega na tym, że tworzysz sam obiekty i nadajesz im właściwości własnie to daje nam IOC czyli odwrócenie sterowania aplikacją od programisty na rzecz frameworku  
 

powinienem stworzyć jeden kontener w pliku index.php w który zarejestruje wszystkie zależności i będę go używał globalnie, czy powinienem to rozbić w jakiś sposób?

Nie jest to wymagane, to zależy od twojej architektóry, moim zdaniem nawet pakowanie konfiguracji do 1 pliku to nie bardzo, chyba żeby do 1 pakietu, gdzie osobno mamy konfiguracje np - warstwy Controlerów, bazy, etc. 
Natomiast ładowanie konfiguracji można zawszeć w 1 pliku 

 

parametry zależne od pewnych działań wykonywanych w aplikacji np

oznacza to że coś w twojej aplikacji jest nie tak, skoro do prawidłowego działania komponentu potrzebujesz ZMIANY STANU, gdzie generalnie bazowe klasy powinny byc bez stanowe i niezależne od "klas zewnętrznych" 
Cięzko odpowiedzieć czy powinieneś modyfikować kontener, powinieneś rozważyć przypadek np. LAZY LOADING, albo ... WZORCA PROXY, który - zadziała w pewien sposób na oczekiwanie ? Trudno powiedzieć nie znając samej aplikacji, mozliwości rozwiązania jest wiele, można wstrzykiwać dany obiekt też zależnie tylko OD PEWNYCH ZDEFYINIOWANYCH "zachowań"  

1
komentarz 17 lutego 2021 przez CSSoup Mądrala (6,460 p.)
Ok, dzięki za przydatne info ;)

Podobne pytania

0 głosów
2 odpowiedzi 632 wizyt
pytanie zadane 13 września 2016 w PHP przez deimos Nowicjusz (120 p.)
0 głosów
1 odpowiedź 242 wizyt
pytanie zadane 10 maja 2020 w PHP przez XiverKi Bywalec (2,050 p.)
0 głosów
1 odpowiedź 297 wizyt
pytanie zadane 24 czerwca 2017 w PHP przez Marduczek Użytkownik (520 p.)

93,023 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...