Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Dependency injection v Nette 2.1 prakticky
Filip Procházka
January 27, 2014
Technology
0
21
Dependency injection v Nette 2.1 prakticky
Filip Procházka
January 27, 2014
Tweet
Share
More Decks by Filip Procházka
See All by Filip Procházka
Evolving architecture
fprochazka
0
52
Value objects in PHP
fprochazka
1
130
Jak psát testy na REST API
fprochazka
0
39
V gitu se nic neztratí
fprochazka
0
180
Co se PHP programátor může naučit od Javy?
fprochazka
1
52
4 roky remote
fprochazka
1
39
Před čím tě Nette ani Symfony neochrání
fprochazka
0
86
Nejlepší cache je žádná cache
fprochazka
0
53
Doctrine: co dělat, když entity nestačí
fprochazka
0
30
Other Decks in Technology
See All in Technology
Hatena Engineer Seminar #23 「チームとプロダクトを育てる Mackerel 開発合宿」
arthur1
0
570
NGINXENG JP#2 - 4-NGINX-エンジニアリング勉強会
hiropo20
0
120
私見「UNIXの考え方」/20230124-kameda-unix-phylosophy
opelab
1
170
Google Cloud Workflows: API automation, patterns and best practices
glaforge
0
100
Cloudflare Workersで動くOG画像生成器
aiji42
1
500
AWS Cloud Forensics & Incident Response
e11i0t_4lders0n
0
400
日経電子版だけじゃない! 日経の新規Webメディアの開発 - NIKKEI Tech Talk #3
sztm
0
340
DNS権威サーバのクラウドサービス向けに行われた攻撃および対策 / DNS Pseudo-Random Subdomain Attack and mitigations
kazeburo
5
1.3k
FlexScan HD2452Wの 後継を探して
tring
0
6.5k
PCI DSS に準拠したシステム開発
yutadayo
0
310
ECテックカンファレンス2023 EC事業部のモバイル開発2023
tatsumi0000
0
320
MLOps Workshopでの学びと弥生の研究開発基盤 / takeaways from MLOps workshop and YAYOI's research and development infrastructure
yayoi_dd
0
120
Featured
See All Featured
A designer walks into a library…
pauljervisheath
199
16k
ParisWeb 2013: Learning to Love: Crash Course in Emotional UX Design
dotmariusz
101
6.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
109
16k
Web Components: a chance to create the future
zenorocha
304
40k
Intergalactic Javascript Robots from Outer Space
tanoku
261
26k
Code Review Best Practice
trishagee
50
11k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
13
1.1k
How GitHub (no longer) Works
holman
298
140k
What's in a price? How to price your products and services
michaelherold
233
9.7k
The Straight Up "How To Draw Better" Workshop
denniskardys
226
130k
Three Pipe Problems
jasonvnalue
89
8.9k
GraphQLとの向き合い方2022年版
quramy
20
9.9k
Transcript
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 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
Setter injection class 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
Property injection class Cart extends Nette\Object { /** @var EntityManager
*/ public $entityManager; http://wbab.suffolk.lib.ny.us/wp-content/uploads/2013/12/medals.jpg
Magic injection class Cart extends Nette\Object { /** @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: - Damejidlo\Cart()
Konfigurace rozšíření nette: latte: macros: - Assets\CssMacro
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\Cart @inject */ public $cart;
Presentery services: productListPresenter: class: ShopModule\ProductsPresenter() setup: - $tempPath(%tempPath%) # nebo
- BlogModule\ArticlePresenter()
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?