+ All Categories
Home > Technology > Dependency injection v Nette 2.1 prakticky

Dependency injection v Nette 2.1 prakticky

Date post: 16-Jun-2015
Category:
Upload: filip-prochazka
View: 1,241 times
Download: 2 times
Share this document with a friend
25
Nette DI @ProchazkaFilip - @Damejidlo
Transcript
Page 1: Dependency injection v Nette 2.1 prakticky

Nette ❤ DI@ProchazkaFilip - @Damejidlo

Page 2: Dependency injection v Nette 2.1 prakticky

Co si povíme?

- rychle prolítneme teorii DI- jak to funguje v Nette- jak napsat použitelné rozšíření

Page 3: Dependency injection v Nette 2.1 prakticky

Teorie: typy injekce

- konstruktor- setter- property- magie

Page 4: Dependency injection v Nette 2.1 prakticky

Konstruktor injectionclass Cart extends Nette\Object { private $entityManager;

public function __construct(EntityManager $em) {$this->entityManager = $em;

}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg

Page 5: Dependency injection v Nette 2.1 prakticky

Setter injectionclass Cart extends Nette\Object { private $entityManager;

public function setEntityManager(EntityManager $em) {$this->entityManager = $em;

}

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg

Page 6: Dependency injection v Nette 2.1 prakticky

Property injectionclass Cart extends Nette\Object { /** @var EntityManager */ public $entityManager;

http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg

Page 7: Dependency injection v Nette 2.1 prakticky

Magic injectionclass Cart extends Nette\Object { /** @var EntityManager */ private $entityManager;

http://www.wyatt-lorenz.com/images/biohazard_warnings.jpg

Page 8: Dependency injection v Nette 2.1 prakticky

Teorie: slovníček

- DI Container (composition root)- služby- implementace / abstrakce

Page 9: Dependency injection v Nette 2.1 prakticky

Praxe: konfigurace

- služby- rozšíření

Page 10: Dependency injection v Nette 2.1 prakticky

Registrace služby

services: - Damejidlo\Cart()

Page 11: Dependency injection v Nette 2.1 prakticky

Konfigurace rozšíření

nette:latte:

macros: - Assets\CssMacro

Page 12: Dependency injection v Nette 2.1 prakticky

Bacha na zanoření

parameters:

services:

nette:

Page 13: Dependency injection v Nette 2.1 prakticky

Praxe: typy služeb

- modely- presentery- komponenty

Page 14: Dependency injection v Nette 2.1 prakticky

Modely

- konstruktor (99.99%)- setter (když jsi v úzkých)- property (ehm?)

Page 15: Dependency injection v Nette 2.1 prakticky

Presentery

- konstruktor (myslím že ne Time)- setter inject*() (přihořívá)- property @inject (vítěz!)

/** @var Damejidlo\Cart @inject */public $cart;

Page 16: Dependency injection v Nette 2.1 prakticky

Presenteryservices:

productListPresenter:class: ShopModule\ProductsPresenter()setup:

- $tempPath(%tempPath%)# nebo- BlogModule\ArticlePresenter()

Page 17: Dependency injection v Nette 2.1 prakticky

Komponenty

- konstruktor (ano prosím!)- setter (meh?)- property (bleh)

Page 18: Dependency injection v Nette 2.1 prakticky

Komponenty v presenterechprotected function createComponentForm(){

return new OrderForm($entityManager???)}

Page 19: Dependency injection v Nette 2.1 prakticky

Ruční továrničkyclass OrderFormFactory {

private $em;function __construct(EntityManager $em) { … }

/** @return OrderForm */public function create() {

return new OrderForm($this->em);}

Page 20: Dependency injection v Nette 2.1 prakticky

Generované továrničky

interface IOrderFormFactory { /** @return OrderForm */ function create();}

Page 21: Dependency injection v Nette 2.1 prakticky

Generované továrničky

services:orderFormFactory:

implement: IOrderFormFactory# nebo- {implement: IOrderFormFactory}

Page 22: Dependency injection v Nette 2.1 prakticky

Generované továrničky/** @var IOrderFormFactory @inject */public $orderFormFactory;

protected function createComponentOrderForm(){

$form = $this->orderFormFactory->create();$form->onSuccess[] = ...;return $form

}

Page 23: Dependency injection v Nette 2.1 prakticky

Rozšířeníclass OrmExtension extends CompilerExtension {

# vytvori službypublic function loadConfiguration() { }# upravuje své a jiné službypublic function beforeCompile() { }# hackuje DI containerpublic function afterCompile() { }

Page 24: Dependency injection v Nette 2.1 prakticky

Dobré rozšíření

- Composer - MUST HAVE- Jednoduchá registrace- Convention over Configuration- validujte

Page 25: Dependency injection v Nette 2.1 prakticky

Dotazy?


Recommended