Prečo je nette sandbox RouteFactory statická

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
tino415
Člen | 46
+
0
-

Prečítal som si článok o DI, potom som si pozrel video https://www.youtube.com/watch?… a akurát sa mi to hodí do alikácia a všimol som si že sandboxe v RouteFactory je funkcia createRoute statická, chcel by som sa spýtať prečo ?

Nemala by biť normálna a RouteFactory ako servis, aby som si cez DI vedel poslať prípadne nejaké servisy ?

Jan Tvrdík
Nette guru | 2595
+
+2
-

Kdysi se to řešilo na GitHubu, závěr je asi takový, že je to v praxi jedno. Obě varianty jsou OK. Statická varianta byla zvolena (pokud si to dobře pamatuji) kvůli jednoduchosti pro začátečníky.

Azathoth
Člen | 495
+
0
-

Pokud si tam nahardcodíš routy, tak může být statická, ale když máme nějaké url adresy v databázi (např. uživatel si může nastavit „alias“ na svůj profil), tak se to hodí udělat jako službu, aby ti právě fungovalo DI.

Tomáš Votruba
Moderator | 1114
+
+2
-

IMHO je to bad practise – viz komentáře u commitu, jelikož očividně navádí začátečníky k uvažování „žádná závislost“ ⇒ „statické metody“.
Také na školení jsem se s tím párkrát potkal. Zbytečně.

Doporučuju používat běžný přístup před touto změnou, tedy:

services:
	- App\RouterFactory
	router: @App\RouterFactory::createRouter

Editoval Tomáš Votruba (5. 9. 2015 16:22)

Jan Tvrdík
Nette guru | 2595
+
0
-

DI funguje i pro statické metody. Akorát nepředáváš závislosti do konstruktoru, ale jako argumenty dané metody.