SlideShare une entreprise Scribd logo
1  sur  25
Télécharger pour lire hors ligne
Nette ❤ DI
@ProchazkaFilip - @Damejidlo
Co si povíme?
- rychle prolítneme teorii DI
- jak to funguje v Nette
- jak napsat použitelné rozšíření
Teorie: typy injekce
- konstruktor
- setter
- property
- magie
Konstruktor injection
class Cart extends NetteObject {
private $entityManager;
public function __construct(EntityManager $em) {
$this->entityManager = $em;
}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Setter injection
class Cart extends NetteObject {
private $entityManager;
public function setEntityManager(EntityManager $em) {
$this->entityManager = $em;
}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Property injection
class Cart extends NetteObject {
/** @var EntityManager */
public $entityManager;

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Magic injection
class Cart extends NetteObject {
/** @var EntityManager */
private $entityManager;

http://www.wyatt-lorenz.com/images/biohazard_warnings.jpg
Teorie: slovníček
- DI Container (composition root)
- služby
- implementace / abstrakce
Praxe: konfigurace
- služby
- rozšíření
Registrace služby
services:
- DamejidloCart()
Konfigurace rozšíření
nette:
latte:
macros:
- AssetsCssMacro
Bacha na zanoření
parameters:
services:
nette:
Praxe: typy služeb
- modely
- presentery
- komponenty
Modely
- konstruktor (99.99%)
- setter (když jsi v úzkých)
- property (ehm?)
Presentery
- konstruktor (myslím že ne Time)
- setter inject*() (přihořívá)
- property @inject (vítěz!)
/** @var DamejidloCart @inject */
public $cart;
Presentery
services:
productListPresenter:
class: ShopModuleProductsPresenter()
setup:
- $tempPath(%tempPath%)
# nebo
- BlogModuleArticlePresenter()
Komponenty
- konstruktor (ano prosím!)
- setter (meh?)
- property (bleh)
Komponenty v presenterech
protected function createComponentForm()
{
return new OrderForm($entityManager???)
}
Ruční továrničky
class OrderFormFactory {
private $em;
function __construct(EntityManager $em) { … }
/** @return OrderForm */
public function create() {
return new OrderForm($this->em);
}
Generované továrničky
interface IOrderFormFactory {
/** @return OrderForm */
function create();
}
Generované továrničky
services:
orderFormFactory:
implement: IOrderFormFactory
# nebo
- {implement: IOrderFormFactory}
Generované továrničky
/** @var IOrderFormFactory @inject */
public $orderFormFactory;
protected function createComponentOrderForm()
{
$form = $this->orderFormFactory->create();
$form->onSuccess[] = ...;
return $form
}
Rozšíření
class OrmExtension extends CompilerExtension {
# vytvori služby
public function loadConfiguration() { }
# upravuje své a jiné služby
public function beforeCompile() { }
# hackuje DI container
public function afterCompile() { }
Dobré rozšíření
- Composer - MUST HAVE
- Jednoduchá registrace
- Convention over Configuration
- validujte
Dotazy?

Contenu connexe

Tendances

MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)Martin Zeman
 
CRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APICRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APIPremek Brada
 
Adam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewAdam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewmdevtalk
 
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne
Jak přemigrovat Slevomat na Doctrine za jedno dopoledneJak přemigrovat Slevomat na Doctrine za jedno dopoledne
Jak přemigrovat Slevomat na Doctrine za jedno dopoledneJosef Kříž
 
jQuery: full frontal
jQuery: full frontaljQuery: full frontal
jQuery: full frontalDavid Grudl
 

Tendances (9)

Kdyby/Events
Kdyby/EventsKdyby/Events
Kdyby/Events
 
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
MicroKernel - aneb špatný název pro Helper (5. sraz přátel Symfony v Praze)
 
CRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná APICRCE - přehled datového modelu a vybraná API
CRCE - přehled datového modelu a vybraná API
 
Drupal Front-end
Drupal Front-endDrupal Front-end
Drupal Front-end
 
Clean code
Clean codeClean code
Clean code
 
Adam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerViewAdam Šimek: Optimalizace skrolování, RecyclerView
Adam Šimek: Optimalizace skrolování, RecyclerView
 
Spring dao
Spring daoSpring dao
Spring dao
 
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne
Jak přemigrovat Slevomat na Doctrine za jedno dopoledneJak přemigrovat Slevomat na Doctrine za jedno dopoledne
Jak přemigrovat Slevomat na Doctrine za jedno dopoledne
 
jQuery: full frontal
jQuery: full frontaljQuery: full frontal
jQuery: full frontal
 

Similaire à Dependency injection v Nette 2.1 prakticky

WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilováníVladimír Smitka
 
Petr Heinz - Čisté testy, dobré testy
Petr Heinz - Čisté testy, dobré testyPetr Heinz - Čisté testy, dobré testy
Petr Heinz - Čisté testy, dobré testyAnna Kovárová
 
MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketTomáš Páral
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)Péhápkaři
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Bohdan Ganický
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Develcz
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelDennis Fridrich
 

Similaire à Dependency injection v Nette 2.1 prakticky (8)

Spring ioc-advanced
Spring ioc-advancedSpring ioc-advanced
Spring ioc-advanced
 
WP výkon a jeho profilování
WP výkon a jeho profilováníWP výkon a jeho profilování
WP výkon a jeho profilování
 
Petr Heinz - Čisté testy, dobré testy
Petr Heinz - Čisté testy, dobré testyPetr Heinz - Čisté testy, dobré testy
Petr Heinz - Čisté testy, dobré testy
 
MoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache WicketMoroSystems na ostravském CZJUGu o Apache Wicket
MoroSystems na ostravském CZJUGu o Apache Wicket
 
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
MicroKernel aneb spatny nazev pro Helper (5. sraz pratel Symfony)
 
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?Rozšiřujeme jQuery aneb proč si nenapsat plugin?
Rozšiřujeme jQuery aneb proč si nenapsat plugin?
 
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
Miroslav Bajtoš - Nativní async/await v Node.js - už tam jsme?
 
Czechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernelCzechitas - školení PHP/Symfony MicroKernel
Czechitas - školení PHP/Symfony MicroKernel
 

Plus de Filip Procházka

Plus de Filip Procházka (7)

4 roky remote
4 roky remote4 roky remote
4 roky remote
 
Před čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochráníPřed čím vás Nette ani Symfony neochrání
Před čím vás Nette ani Symfony neochrání
 
Nejlepší cache je žádná cache
Nejlepší cache je žádná cacheNejlepší cache je žádná cache
Nejlepší cache je žádná cache
 
Testování prakticky
Testování praktickyTestování prakticky
Testování prakticky
 
Kdyby/Translation
Kdyby/TranslationKdyby/Translation
Kdyby/Translation
 
Nette Tester / Posobota
Nette Tester / PosobotaNette Tester / Posobota
Nette Tester / Posobota
 
Composer / Posobota
Composer / PosobotaComposer / Posobota
Composer / Posobota
 

Dependency injection v Nette 2.1 prakticky