Best practise pro inject do presenterů

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

Přijde mi docela úchvatné, že téměř každá odpověď na otázku ohledně injectování do presenterů je best practise a přitom jsou ty odpovědi různé. Ano přiznám se, taky jsem to tuším jednou udělal…

Máme pár hlavních možností:

  1. Inject anotace všude
  2. Inject anotace v base presenterech, constructor v ostatních
  3. Inject metody všude
  4. Inject metody v base presenterech, constructor v ostatních

Předpokládám, že nikdo nekombinuje inject anotace s inject metodami a ani nepoužívá constructor hell.

Osobně naprosto vždy bez výjimky používám 4. možnost. Nechci zde ale zbytečně znovu řešit, která možnost je nejlepší. Jsem si jistý (doufám), že všichni víme výhody i nevýhody všech.

Chtěl bych jen vědět, co je vlastně ten best practise pro Nette. Jakou možnost odpovídat zde na fóru ostatním?

Jediná „klidná“ diskuze, kterou si pamatuji, že jsem četl, je tato . Akorát tam David napsal taky 4. možnost a pak 1. nebo 2. (nejsem si jistý), takže to ode mě vypadá teď předpojatě. Tak zbytek kdyžtak přes vyhledávač .

Děkuji :-)

Michal Vyšinský
Člen | 608
+
+5
-

Já osobně vše řeším přes komponenty. Takže v presenterech injectuji přes anotace jen továrničky na použité komponenty a zbytek řeším přes constructor injection v komponentách.

hrach
Člen | 1844
+
+2
-

Myslím, že ještě zásadní je to, jestli to „ostatní“ je aplikace nebo komponenta, a ta může být ještě veřejná nebo privátní, etc. Čím vyšší potřeba znovupoužitelnosti, tím je třeba to dělat čistěji. U presenteru používáme inject anotace taký právě díky tomu, že tu žádnou znovupoužitelnost prakticky nepotřebujeme. Míry kdy co jak použít si urči především ty sám. Osobně preferuji čitelnost a použitelnost před čistotou, ale každý má jiné hodnoty, že.

Lukeluha
Člen | 130
+
+1
-

Beru to dle přednášky od Filipa Procházky zde ,takže v presenterech používám anotaci a v komponentách constructor.

Šaman
Člen | 2668
+
0
-

Jak určit best practise? Každý má svoje.

V novém skeletonu (web-project) není žádné injectování, tak považuji za „oficiální“ to, které je v Sandboxu, tedy varianta 2. Osobně ji používám taky.

Jinak možnosti 1. a 3. ještě nedávno nešly bez hacků a dnes by měly jít, ale je nutné to zapsat do configu. Nativně (v základu) myslím stále nebudou fungovat.

A varianta 5. – konstruktor (skoro) všude – taky není vždy až takové peklo. Stačí si jen hlídat, aby byl každý presenter buď abstract, nebo final. U abstraktních je potřeba zvolit inject metodou, u final klidně ten konstruktor. A stejně to mám i v případě abstraktních předků komponent.

David Kudera
Člen | 455
+
0
-

Díky za odpovědi. Jinak jak jsem psal v titulku, myslel jsem opravdu jen presentery, takže to „ostatní“ bylo myšleno právě jako final presentery.

Taky s váma úplně souhlasím, hlavně s tím, že presentery je lepší mít prázdné a všude používat komponenty. Což taky rozhodně vždy dělám .

Když nad tím teď přemýšlím, tak vlastně je pravda, že nyní se to dá vztáhnout ke všemu, když máme decorator extension a nemusíme používat např. toto

Jinak dá se tedy říct, že v presenterech jsou tu inject anotace tím best practise (ano všichni mají svůj vlastní)? Mě osobně je to celkem jedno, dál budu vždy striktně používat construtor. Jde mi o to, že si myslím, že zrovna takovéto detaily musí být občas pro začátečníky matoucí, když každý řekne něco jiného.

Ještě @Šaman k tomu construtor hell. To jsem myslel v návaznosti na ten příspěvek od Davida, co jsem postoval nahoře a k tomu, že dost často tu vidím, kolik lidí se snaží do předků předat pomalu všechny závislosti, co mají v di registrovaný..

Šaman
Člen | 2668
+
0
-

Aha, tak jestli se bavíme jen o presenterech, tak pak je „oficiální“ best practise možnost 1. Hlavně protože je nejkratší na zápis.