Proč vlastně používat container?
- Donkeykong
- Člen | 39
Ahoj,
omlouvam se za pravděpodobně stupidní dotaz, ale otázka zní, proč bych měl vlastně v nette používat container a služby a továrničky nějak do hloubky? Nějaký čas se nette učím a v podstatě část services jsem zatím použil pouze v případech kdy jsem si vytvořil nové repository jako: articleRepository: Article\ArticleRepository a podobně. Nicméně v manuálu je často container používany i k tvorbě tříd a podobně. Je to kvůli dependency injection nebo jsem úplně mimo? A v podstatě téměř vše co se pomalu definuje v containeru můžu definovat i přímo například v presenterech a modelech?
- Jan Tvrdík
- Nette guru | 2595
@Donkeykong: Container je nástroj, která pomáhá s používáním návrhového vzoru Dependency Injection. Nepoužíváš-li DI, tak v podstatě ani nepotřebuješ DI container.
- Donkeykong
- Člen | 39
Díky za odpovědi, pochopil jsem tedy správně. :). Časem se k DI snad dopracuju, protože jak jsem pochopil zde z fóra, udržuje to čistší a lépe testovatelný kód.
- Šaman
- Člen | 2666
Taky to přesouvá vytváření tříd na jedno místo. Pokud si budeš
některé služby (profláklý je příklad s databází) vytvářet ručně,
může se stát, že je vytvoříš pokaždé maličko jinak. Nebo když budeš
chtít vytváření změnit (třeba jim hned něco setnout), tak to někde
uděláš a někde na to zapomeneš.
Tohle můžeš řešit buď statickou factory method, nebo tím, že si službu
vytvoříš jednou a všem kteří ji potřebují ji předáš.
Osobně bych doporučoval používat container i když nebudeš striktně
dodržovat DI. Pak máš prostě v containeru (context) všechno možné a
třída si vytáhne (nikoliv vytvoří) co
potřebuje. Ideální je to ale dotáhnout do stavu container + DI, kde každá
třída dostane co potřebuje.
Souvisí to i s kontrolou nad kódem.
Když si třída vytváří co chce, tak máš nad kódem jako celkem
minimální kontrolu.
Když si vytáhne, co potřebuje, tak víš, že služba musí někde existovat,
někde ji vytváříš.
Když si jen řekne o to, co potřebuje a někdo jí závislosti předá, tak
máš krásně přehled o jejím API – jasné vstupy a jasné výstupy.
Dobře se to kreslí, dobře se to testuje, dobře se nahrazuje jedna třída
jinou třídou.
Editoval Šaman (13. 7. 2013 15:36)