DI v presenteri nieje lazy?

Čamo
Člen | 786
+
0
-

Prosím vás prečo sa mi spúšta conštruktor modelu, keď sa cez @inject deklaruje v BasePresentery? Ja som si vždy myslel že je to lazy. Aj podľa dokumentácie som to tak pochopil.
the individual services are created only on demand (lazy loading)…
Ten patern s BasePresenterom som zdedil a asi je to bad practice ak to chápem správne.
Čiže @inject asi automaticky konštruktor zavolá a malo by sa teda injektovať iba do presenterov ktoré danú závislosŤ potrebujú?

nightfish
Člen | 474
+
+3
-

Čamo napsal(a):
the individual services are created only on demand (lazy loading)…

Pravděpodobně ve smyslu, že se neinstanciují vždy, ale jen když si je vyžádá jiná služba/presenter atd.
U presenteru se v okamžiku jeho vytvoření vytvářejí i všechny jeho závislosti, nezávisle na tom, jestli jsou přes konstruktor, atribut #[Inject], anotaci @inject nebo inject*() metodu.

Pokud chceš lazy-load i v takovém případě, tak si hádám můžeš pomoct accessorem.

dakur
Člen | 493
+
+1
-

Nebo factory, ta taky funguje jako lazy-loading..

Editoval dakur (2. 5. 2023 17:58)

Čamo
Člen | 786
+
0
-

Ok díky, bude mto postupne presúvať z BasePresentera iba tam kde je to potrebné.

m.brecher
Generous Backer | 763
+
+1
-

@Čamo

Aj podľa dokumentácie som to tak pochopil. the individual services are created only on demand (lazy loading)…

Pošli prosím odkaz, kde je v dokumentaci ta věta, pokud to tam je uvedeno nesprávně, mělo by se to opravit.

David Grudl
Nette Core | 8150
+
+2
-

@mbrecher našel jsem ji tady, ale tam je to imho ok.

m.brecher
Generous Backer | 763
+
+1
-

@DavidGrudl

Souhlasím, je to teoretický článek o principu DI a v kontextu toho článku je to OK. Problém ale může nováčkovi dělat to, že si tu větu míněnou v tom teoretickém kontextu „the individual services are created only on demand (lazy loading)“ zobecní tak, že se konstruktor služeb Nette volá až když se služba použije – tj. i když službu předáme autowire do presenteru, služba se vytvoří lazy, tj. např. komponenta až při vykreslování.

100% souhlasím s formulací „the individual services are created only on demand“.

Formulace „lazy loading“ může způsobit nesprávné pochopení. V Nette skutečný lazy loading zajistí accessor.

Proto navrhuji větu „the individual services are created only on demand (lazy loading)“ změnit na „the individual services are created only on demand“, smysl článku to nezmění a předejde se nesprávnému pochopení.

Jestli souhlasíš, můžu napsat PR.

Čamo
Člen | 786
+
0
-

Aha je to článok mimo dokumentácie. Prepáčte, som sa v tom asi stratil.