Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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 $...
Setter injection
class Cart extends NetteObject {
private $entityManager;
public function setEntityManager(EntityManager $...
Property injection
class Cart extends NetteObject {
/** @var EntityManager */
public $entityManager;

http://wbab.suffolk....
Magic injection
class Cart extends NetteObject {
/** @var EntityManager */
private $entityManager;

http://www.wyatt-loren...
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 Damejidlo...
Presentery
services:
productListPresenter:
class: ShopModuleProductsPresenter()
setup:
- $tempPath(%tempPath%)
# nebo
- Bl...
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...
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 createComponentOr...
Rozšíření
class OrmExtension extends CompilerExtension {
# vytvori služby
public function loadConfiguration() { }
# upravu...
Dobré rozšíření
- Composer - MUST HAVE
- Jednoduchá registrace
- Convention over Configuration
- validujte
Dotazy?
Upcoming SlideShare
Loading in …5
×

Dependency injection v Nette 2.1 prakticky

2,373 views

Published on

Published in: Technology
  • Be the first to comment

Dependency injection v Nette 2.1 prakticky

  1. 1. Nette ❤ DI @ProchazkaFilip - @Damejidlo
  2. 2. Co si povíme? - rychle prolítneme teorii DI - jak to funguje v Nette - jak napsat použitelné rozšíření
  3. 3. Teorie: typy injekce - konstruktor - setter - property - magie
  4. 4. 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
  5. 5. 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
  6. 6. Property injection class Cart extends NetteObject { /** @var EntityManager */ public $entityManager; http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
  7. 7. Magic injection class Cart extends NetteObject { /** @var EntityManager */ private $entityManager; http://www.wyatt-lorenz.com/images/biohazard_warnings.jpg
  8. 8. Teorie: slovníček - DI Container (composition root) - služby - implementace / abstrakce
  9. 9. Praxe: konfigurace - služby - rozšíření
  10. 10. Registrace služby services: - DamejidloCart()
  11. 11. Konfigurace rozšíření nette: latte: macros: - AssetsCssMacro
  12. 12. Bacha na zanoření parameters: services: nette:
  13. 13. Praxe: typy služeb - modely - presentery - komponenty
  14. 14. Modely - konstruktor (99.99%) - setter (když jsi v úzkých) - property (ehm?)
  15. 15. Presentery - konstruktor (myslím že ne Time) - setter inject*() (přihořívá) - property @inject (vítěz!) /** @var DamejidloCart @inject */ public $cart;
  16. 16. Presentery services: productListPresenter: class: ShopModuleProductsPresenter() setup: - $tempPath(%tempPath%) # nebo - BlogModuleArticlePresenter()
  17. 17. Komponenty - konstruktor (ano prosím!) - setter (meh?) - property (bleh)
  18. 18. Komponenty v presenterech protected function createComponentForm() { return new OrderForm($entityManager???) }
  19. 19. Ruční továrničky class OrderFormFactory { private $em; function __construct(EntityManager $em) { … } /** @return OrderForm */ public function create() { return new OrderForm($this->em); }
  20. 20. Generované továrničky interface IOrderFormFactory { /** @return OrderForm */ function create(); }
  21. 21. Generované továrničky services: orderFormFactory: implement: IOrderFormFactory # nebo - {implement: IOrderFormFactory}
  22. 22. Generované továrničky /** @var IOrderFormFactory @inject */ public $orderFormFactory; protected function createComponentOrderForm() { $form = $this->orderFormFactory->create(); $form->onSuccess[] = ...; return $form }
  23. 23. 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() { }
  24. 24. Dobré rozšíření - Composer - MUST HAVE - Jednoduchá registrace - Convention over Configuration - validujte
  25. 25. Dotazy?

×