SlideShare ist ein Scribd-Unternehmen logo
1 von 48
Гибкая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Zend
  Framework ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с
использованиСм Dependency
          Injection
АлСксСй ΠšΠ°Ρ‡Π°Π΅Π²
Senior/Lead PHP Developer at
Cogniance

4+ Π³ΠΎΠ΄Π° ΠΎΠΏΡ‹Ρ‚Π° c PHP

3+ года использования Zend
Framework

Активный участник
zendframework.ru/forum

ZF2 contributor
Мои ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹
Email:
kachayev@gmail.com

Twitter:
@kachayev

Facebook:
http://www.facebook.com/kachayev

Github:
https://github.com/kachayev
Мои ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹
Email:
kachayev@gmail.com

Twitter:
@kachayev

Facebook:
http://www.facebook.com/kachayev

Github:
https://github.com/kachayev
О Ρ‡Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ

1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости

2. IoC Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

3. РСализация DI Π² Zend Framework с использованиСм
Symfony DI Container

4. АнтипаттСрны, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ
зависимостями

5. IoC Π² Zend Framework 2.0
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости
     (dependency)
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости: Π½Π°Ρ‡Π°Π»ΠΎ
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости: Π΄Π°Π»Π΅Π΅
Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости: ΠΈ...




Π—Π°Π΄Π°Ρ‡Π° Π½Π° Ρ€Π°Π·ΠΌΠΈΠ½ΠΊΡƒ: ΠΊΠ°ΠΊ тСстируя ProfileController
Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ DbConnection Π½Π° Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹ΠΉ?
Π§Ρ‚ΠΎ здСсь ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ?

1. Π–Π΅ΡΡ‚ΠΊΠΎΡΡ‚ΡŒ ΠΈ Ρ…Ρ€ΡƒΠΏΠΊΠΎΡΡ‚ΡŒ (измСнСния => ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°)
Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (ΠΏΠΎ Π ΠΎΠ±Π΅Ρ€Ρ‚Ρƒ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ)

2. "ΠΠ΅Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ" систСмы

3. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ прозрачности связСй (ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ)

4. Код Π½Π΅ самого Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ практичСски
Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΡΡ‚ΡŒ)
IoC patterns:
тСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°
IoC Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ

1. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Inversion of Control:

ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ
Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ.

Π›Π΅Π³ΠΊΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ!

2. РСализация Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π·Π° зависимости пСрСходят ΠΊ классам
Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.
IoC Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

Π£ Π€Π°ΡƒΠ»Π΅Ρ€Π°:
http://martinfowler.com/articles/injection.html

Π”Π²Π° основных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°:

1. Service Locator

2. Dependency Injection (Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ
ЗависимостСй)
http://ru.wikipedia.org/wiki/Dependency_Injection

(Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΠ³ΠΎ пСрСкладываСтся ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ
Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями)
Service Locator

Π‘ΡƒΡ‚ΡŒ: зависимостями управляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚
ServiceLocator
Service Locator

Π”Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ зависимости
Dependency Injection
 Π‘ΡƒΡ‚ΡŒ: зависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· setter
 ΠΈΠ»ΠΈ конструктор.

Зависимости




                                               Π‘Π±ΠΎΡ€ΠΊΠ°
3 шага к Dependency Injection

Π¨Π°Π³ 1. Getter/Setter

Π¨Π°Π³ 2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ (interface)

Π¨Π°Π³ 3. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
3 шага к Dependency Injection
На ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π²Ρ‹ΡˆΠ΅
ИдСм дальшС: ΠΈΠ³Ρ€Π° Π² ΠΏΡΡ‚Π½Π°ΡˆΠΊΠΈ

"Π”Π²ΠΈΠ³Π°Π΅ΠΌ" всС зависимости "Π½Π°Π²Π΅Ρ€Ρ…" Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ создаСм Π½Π΅ прямо, Π° Ρ‡Π΅Ρ€Π΅Π· Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ·
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:




Π§Π΅Π³ΠΎ Π΅Ρ‰Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹:

- build ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

- shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, для возмоТности ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ
Π·Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (ΠΏΡ€ΠΈ
нСобходимости)
Π§Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ DI?

1. Π›ΡŽΠ±ΠΎΠΉ класс Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ зависимостСй ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ
ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

2. Код Π»Π΅Π³ΠΊΠΎ пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ/ΠΈΠ»ΠΈ
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

3. Один шаг Π² сторону ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности
класса
Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² с
практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния
Service Locator
+ ΠΎΡ‡Π΅Π½ΡŒ просто Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ (Π΄Π°ΠΆΠ΅
ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚) - Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ
+ Π»Π΅Π³ΠΊΠΎ Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ получСния
ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°
- слоТно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹

DI
+ Π±ΠΎΠ»Π΅Π΅ управляСмый ΠΏΡ€ΠΈ сильном разрастании
+ обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ прозрачности ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ
- практичСски Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ³ΠΎ внСдрСния

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС смСшаного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°
ZF 1.* &
Symfony DI Container
PHP DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹

1. Symfony Dependency Injection
2. Pico Container
3. Yadif_Container
4. Phemto
5. .... (ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…)
ВозмоТности Symfony DI

1. Π£Π΄ΠΎΠ±Π½ΠΎΠ΅ прСдставлСниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π·
ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ (xml, yaml)

2. Π“ΠΈΠ±ΠΊΠΈΠ΅ возмоТности ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π°

3. Dump собранного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² php-ΠΊΠΎΠ΄ для увСличСния
ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

4. Shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

5. Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ
DI Π² Zend
Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹:
- ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для Application
- ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ рСсурс
- ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Bootstrap
Как ΠΌΡ‹ поступим?
ΠŸΡ€ΠΈΠΌ. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ зависимостСй, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅
смотрим (helpers, plugins, View, request/response ΠΈ Ρ‚.Π΄.)

1. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² Bootstrap вмСсто
стандартного Zend_Registry

2. Π’ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π΅, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π·
ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Helper - ServiceContainer
Π­Ρ‚ΠΎ идСологичСски Service Locator.

3. PreDispatch-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ (ServiceContainer
helper)

Sources
https://github.com/kachayev/zfconf-speech
Service locator helper
Service locator helper - использованиС




ΠŸΠ»ΡŽΡΡ‹
+ простота ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
+ Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ "Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ³ΠΎ" внСдрСния

ΠœΠΈΠ½ΡƒΡΡ‹
- "частичный" DI - ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ являСтся
самодостаточным ΠΈ связан с helper-ΠΎΠΌ
Dependency Injection ΠΏΡ€ΠΈ
диспСчирСзации
1. Π’ helper-e добавляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ preDispatch() - Π±ΡƒΠ΄Π΅Ρ‚
Π²Ρ‹Π·Π²Π°Π½Π° FrontController-ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ диспСчСризациСй
ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

2. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² Π½Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°

3. Π§Π΅Ρ€Π΅Π· Zend_Reflection_Class Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ свойста ΠΈ
ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия @Inject Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ

4. Π˜Π½ΡŠΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ зависимости (Ρ‡Π΅Ρ€Π΅Π· setter ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π·
Ρ€Π΅Ρ„Π»Π΅ΠΊΡ†ΠΈΡŽ)
Dependency Injection ΠΏΡ€ΠΈ
диспСчирСзации




ΠŸΠ»ΡŽΡΡ‹ + Ρ‚Π΅ ΠΆΠ΅
ΠœΠΈΠ½ΡƒΡΡ‹
- ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ являСтся самодостаточным ΠΈ связан с
Ρ†ΠΈΠΊΠ»ΠΎΠΌ диспСчирСзации
DI - ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅

НСгативный ΠΌΠΎΠΌΠ΅Π½Ρ‚ DI - "ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ" ΠΊ inject-
ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ
Exception-Π°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅:




БСзопаснСС - RuntimeException()
DI - lazy loading
Иногда Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ
Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с "тяТСлыми" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ
зависимостСй.

UserService->AuthProvider->AuthAdapter->DbConnection

Но DbConnection ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ пригодится. РСшСниС -
Ρ„Π°Π±Ρ€ΠΈΠΊΠ°.
DI - unit-тСстированиС

1. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ собран Π½Π° любом ΡƒΡ€ΠΎΠ²Π½Π΅
ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ зависимостСй, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ
протСстирован ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

2. Π‘Π±ΠΎΡ€ΠΊΠ° тСстируСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ проводится ΠΊΠ°ΠΊ
ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСстовый ΠΊΠΎΠ½Ρ„ΠΈΠ³), Ρ‚Π°ΠΊ ΠΈ Π²
"Ρ€ΡƒΡ‡Π½ΠΎΠΌ" Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ DI-ready Π²
Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°).
АнтипаттСрны IoC:
Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ
   зависимостями
АнтипаттСрны
НС-injectable:

1. Singleton
- замСняСтся Π½Π° shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

2. Static class
- ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ
ΠΈΠ½ΡŠΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

3. Cross-reference
- ΠΎΠ±ΡŠΠΊΡ‚Ρ‹ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€
Bootstrap->FrontController->Bootstrap
АнтипаттСрны
НС-Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅:

4. "Π‘Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€"
- зависимости ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½ΠΎ сам ΠΊΠΎΠΉΠ½Π΅ΠΉΠ½Π΅Ρ€
пСрСдаСтся (injected) Π²Π½ΠΈΠ· ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ
IoC & ZF2
IoC Π² Zend Framework

2007 Π³ΠΎΠ΄

Zend_Di component proposal (Federico Cargnelutti)
http://framework.zend.com/wiki/display/ZFPROP/Zend_Di+-
+Federico+Cargnelutti

НСпринято ΠΈΠ·-Π·Π° комплСксности

2008 Π³ΠΎΠ΄

Zend_Container component proposal (Bradley Holt)
http://framework.zend.com/wiki/display/ZFPROP/Zend_Container+-
+Bradley+Holt
IoC Π² Zend Framework 2.0

Matthew Weier O'Phinney
"Zend Framework 2 Patterns"

Roadmap...
- ...
- Inversion of Control

1. Service Locator
2. Dependency Injector

(Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ZF 2.0 Roadmap ΠΈΡ… Π½Π΅Ρ‚)
IoC Π² Zend Framework 2.0

10 ΠœΠ°Ρ€Ρ‚Π°, 2011

Proposal for ServiceLocator and DependencyInjector
(http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+ServiceLocator+and+Dep
endencyInjector)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²
https://github.com/weierophinney/zf-examples/tree/projects%2Fzf2.di/zf2-di

Π’Ρ‹Π·Π²Π°Π»ΠΎ достаточно Π±ΡƒΡ€Π½ΠΎΠ΅ обсуТдСниС Π² рассылкС
ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€ΠΎΠ².

Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: лицСнзия ZF Π½Π΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
IoC Π² Zend Framework 2.0

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Proposal ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ достаточно
искусствСнны ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹.

Π’ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ:
IoC Π² Zend Framework 2.0

Π§Ρ‚ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ
Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ смСшивания ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² Π½Π΅ΠΊΠΈΠΉ DI based
Service Locator (ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° java-ский Avalon Framework):
Бпасибо за вниманиС!



            Вопросы
              ???
Мои ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹
Email:
kachayev@gmail.com

Twitter:
@kachayev

Facebook:
http://www.facebook.com/kachayev

Github:
https://github.com/kachayev

Weitere Γ€hnliche Inhalte

Was ist angesagt?

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСми
ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– ΡΡ…Π΅ΠΌΠΈΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСми
ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСмиAvivi Academy
Β 
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² maven
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² mavenΠ’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² maven
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² mavenDmitry Zinushin
Β 
Java compilers and IDEs
Java compilers and IDEsJava compilers and IDEs
Java compilers and IDEschashnikov
Β 
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅Alexander Byndyu
Β 
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстировании
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстировании
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстированииYandex
Β 
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌRoman Brovko
Β 
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³zfconfua
Β 
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉSergii Shmarkatiuk
Β 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DrupalCamp Kyiv
Β 
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊDotNetConf
Β 
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation Tool
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation ToolАндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation Tool
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation ToolQA Club Minsk
Β 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
Β 
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠšΠ°ΠΊ ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅DotNetConf
Β 
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Android
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для AndroidGradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Android
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для AndroidSQALab
Β 
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСво
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ Π΄Π΅ΡˆΠ΅Π²ΠΎΠ Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСво
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСвоDotNetConf
Β 

Was ist angesagt? (17)

ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСми
ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– ΡΡ…Π΅ΠΌΠΈΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСми
ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½Ρ– способи Π·Π»ΠΎΠΌΡ–Π² Ρ‚Π° ΡˆΠ°Ρ…Ρ€Π°ΠΉΡΡŒΠΊΡ– схСми
Β 
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² maven
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² mavenΠ’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² maven
Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² maven
Β 
Java compilers and IDEs
Java compilers and IDEsJava compilers and IDEs
Java compilers and IDEs
Β 
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ управлСния зависимостями Π² ΠΊΠΎΠ΄Π΅
Β 
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстировании
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстировании
ΠœΠΈΡ…Π°ΠΈΠ» Π›Π΅Π²ΠΈΠ½: Автоматизация Π² мобильном тСстировании
Β 
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»Π»ΠΎΠ³ΠΈΠΈ Agile
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»Π»ΠΎΠ³ΠΈΠΈ AgileΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»Π»ΠΎΠ³ΠΈΠΈ Agile
ΠœΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»Π»ΠΎΠ³ΠΈΠΈ Agile
Β 
Dagger 2
Dagger 2Dagger 2
Dagger 2
Β 
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
09 - Java. ВСстированиС Java-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ
Β 
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
Π­Π²ΠΎΠ»ΡŽΡ†ΠΈΡ ZF: Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°, ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
Β 
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ сборками ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ΠΌ Π²Π΅Π± ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ
Β 
DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!DESIGN PATTERNS? EASY!
DESIGN PATTERNS? EASY!
Β 
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊ
ΠœΠΈΠΊΡ€ΠΎΡΠ΅Ρ€Π²ΠΈΡΡ‹: взгляд свСрху ΠΈ Π² Π±ΠΎΠΊ
Β 
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation Tool
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation ToolАндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation Tool
АндрСй Π‘Ρ‚Π°Ρ…ΠΈΠ΅Π²ΠΈΡ‡ - Appium Mobile Automation Tool
Β 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
Β 
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠšΠ°ΠΊ ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Как ΠΏΡ€ΠΈΡ€ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅
Β 
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Android
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для AndroidGradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Android
Gradle. Новый ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ для Android
Β 
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСво
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ Π΄Π΅ΡˆΠ΅Π²ΠΎΠ Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСво
Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ…, распрСдСлСнных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: быстро ΠΈ дСшСво
Β 

Γ„hnlich wie DI and Zend Framework (ZFConf2011)

WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...
WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...
WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...GeeksLab Odessa
Β 
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...CodeFest
Β 
ВстрСчайтС Zend Framework 2.0
ВстрСчайтС Zend Framework 2.0ВстрСчайтС Zend Framework 2.0
ВстрСчайтС Zend Framework 2.0zfconfua
Β 
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡΠ˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡVladimir Ignatev
Β 
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.EatDog
Β 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tddSerhiy Kalinets
Β 
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ruby
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ RubyΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ruby
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ RubyProvectus
Β 
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎCodeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎCOMAQA.BY
Β 
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСты
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСтыJEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСты
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСтыdmalykhanov
Β 
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСкс
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСксCΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСкс
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСксOntico
Β 
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒΠΡ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒAndrey Bibichev
Β 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design PatternsEugene Merkoulov
Β 
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp Vault
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp VaultКак ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp Vault
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp VaultOleg Mykolaichenko
Β 
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...ZFConf Conference
Β 
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)Alexey Kachayev
Β 
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Autofac»Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»MskDotNet Community
Β 
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Autofac»Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»Yulia Tsisyk
Β 
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктированияksmster
Β 
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker + gitlab ci
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с  Docker + gitlab ciΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с  Docker + gitlab ci
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker + gitlab ciАлСксандр Π‘ΠΈΠ³Π°Ρ‡Π΅Π²
Β 
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика SQALab
Β 

Γ„hnlich wie DI and Zend Framework (ZFConf2011) (20)

WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...
WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...
WebCamp:Back-end Developers Day - ДСнис ΠŸΠΎΡ‚Π°ΠΏΠΎΠ² "ΠŸΡ€ΠΎΡΡ‚Ρ‹ΠΌΠΈ словами ΠΎ 12-Ρ„Π°ΠΊΡ‚ΠΎΡ€...
Β 
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...
CodeFest 2014. Π¨ΠΊΡ€Π΅Π΄ΠΎΠ² Π‘. β€” Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅. ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΎ...
Β 
ВстрСчайтС Zend Framework 2.0
ВстрСчайтС Zend Framework 2.0ВстрСчайтС Zend Framework 2.0
ВстрСчайтС Zend Framework 2.0
Β 
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡΠ˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ
Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ зависимости ΠΈ Π˜Π½Π²Π΅Ρ€ΡΠΈΡ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Ρ
Β 
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.
Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ.
Β 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
Β 
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ruby
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ RubyΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ruby
ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° инвСрсии зависимостСй Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ruby
Β 
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎCodeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ
Codeception + Docker + Robo ΠΈ Ρ‡Ρ‚ΠΎ ΠΈΠ· этого Π²Ρ‹ΡˆΠ»ΠΎ
Β 
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСты
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСтыJEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСты
JEE Conf: АрхитСктура Android ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ: ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ ΠΈ Π²Ρ€Π΅Π΄Π½Ρ‹Π΅ совСты
Β 
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСкс
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСксCΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСкс
CΠ΅Ρ€Π³Π΅ΠΉ ΠšΠΎΠ½ΡΡ‚Π°Π½Ρ‚ΠΈΠ½ΠΎΠ², ЯндСкс
Β 
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒΠΡ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ
АрхитСктура Π² Agile: слабая ΡΠ²ΡΠ·Π½ΠΎΡΡ‚ΡŒ
Β 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
Β 
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp Vault
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp VaultКак ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp Vault
Как ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ сСкрСты Π² git ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Hashicorp Vault
Β 
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...
ZFConf 2011: Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы: ΠŸΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Zend Framework ΠΏΡ€...
Β 
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)
Π’ΠΎΡŽΠ΅ΠΌ Π·Π° рСсурсы (ZFConf2011)
Β 
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Autofac»Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Β 
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Autofac»Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Илья Π•Ρ„ΠΈΠΌΠΎΠ² Β«IoC/DI Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ AutofacΒ»
Β 
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования
ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ проСктирования
Β 
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker + gitlab ci
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с  Docker + gitlab ciΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с  Docker + gitlab ci
ΠŸΡ€ΠΎΡ†Π΅ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ тСстирования с Docker + gitlab ci
Β 
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика
ВСстированиС ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ тСстировщика
Β 

KΓΌrzlich hochgeladen

ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...
ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...
ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...Π˜Ρ€ΠΎΠ½ΠΈΡ бСзопасности
Β 

KΓΌrzlich hochgeladen (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Β 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Β 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
Β 
Π‘Π˜Π‘Π’Π•ΠœΠ ΠžΠ¦Π•ΠΠšΠ˜ Π£Π―Π—Π’Π˜ΠœΠžΠ‘Π’Π•Π™ CVSS 4.0 / CVSS v4.0 [RU].pdf
Π‘Π˜Π‘Π’Π•ΠœΠ ΠžΠ¦Π•ΠΠšΠ˜ Π£Π―Π—Π’Π˜ΠœΠžΠ‘Π’Π•Π™ CVSS 4.0 / CVSS v4.0 [RU].pdfΠ‘Π˜Π‘Π’Π•ΠœΠ ΠžΠ¦Π•ΠΠšΠ˜ Π£Π―Π—Π’Π˜ΠœΠžΠ‘Π’Π•Π™ CVSS 4.0 / CVSS v4.0 [RU].pdf
Π‘Π˜Π‘Π’Π•ΠœΠ ΠžΠ¦Π•ΠΠšΠ˜ Π£Π―Π—Π’Π˜ΠœΠžΠ‘Π’Π•Π™ CVSS 4.0 / CVSS v4.0 [RU].pdf
Β 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Β 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Β 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Β 
ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...
ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...
ИБВОЧНИКИ Π˜ΠΠΠžΠ’ΠΠ¦Π˜ΠžΠΠΠžΠ‘Π’Π˜ КИВАЯ (ПО Π’Π•Π Π‘Π˜Π˜ DGAP) | The Sources of China’s Inn...
Β 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
Β 

DI and Zend Framework (ZFConf2011)

  • 1. Гибкая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Zend Framework ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ с использованиСм Dependency Injection
  • 2. АлСксСй ΠšΠ°Ρ‡Π°Π΅Π² Senior/Lead PHP Developer at Cogniance 4+ Π³ΠΎΠ΄Π° ΠΎΠΏΡ‹Ρ‚Π° c PHP 3+ Π³ΠΎΠ΄Π° использования Zend Framework Активный участник zendframework.ru/forum ZF2 contributor
  • 5. О Ρ‡Π΅ΠΌ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ 1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости 2. IoC Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ 3. РСализация DI Π² Zend Framework с использованиСм Symfony DI Container 4. АнтипаттСрны, ΠΈΠ»ΠΈ Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями 5. IoC Π² Zend Framework 2.0
  • 9. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ зависимости: ΠΈ... Π—Π°Π΄Π°Ρ‡Π° Π½Π° Ρ€Π°Π·ΠΌΠΈΠ½ΠΊΡƒ: ΠΊΠ°ΠΊ тСстируя ProfileController Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ DbConnection Π½Π° Ρ„Π΅ΠΉΠΊΠΎΠ²Ρ‹ΠΉ?
  • 10. Π§Ρ‚ΠΎ здСсь ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ? 1. Π–Π΅ΡΡ‚ΠΊΠΎΡΡ‚ΡŒ ΠΈ Ρ…Ρ€ΡƒΠΏΠΊΠΎΡΡ‚ΡŒ (измСнСния => ΠΏΠΎΠ»ΠΎΠΌΠΊΠ°) Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ (ΠΏΠΎ Π ΠΎΠ±Π΅Ρ€Ρ‚Ρƒ ΠœΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ) 2. "ΠΠ΅Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ" систСмы 3. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ прозрачности связСй (ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ) 4. Код Π½Π΅ самого Π½ΠΈΠΆΠ½Π΅Π³ΠΎ уровня ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ практичСски Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ (ΠΌΠΎΠ½ΠΎΠ»ΠΈΡ‚Π½ΠΎΡΡ‚ΡŒ)
  • 11. IoC patterns: тСория ΠΈ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°
  • 12. IoC Π² Ρ‚Π΅ΠΎΡ€ΠΈΠΈ 1. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Inversion of Control: ΠœΠΎΠ΄ΡƒΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π²ΠΈΡΠΈΡ‚ΡŒ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π½ΠΈΠΆΠ½ΠΈΡ… ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ. Π›Π΅Π³ΠΊΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ! 2. РСализация Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅: ΠžΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π·Π° зависимости пСрСходят ΠΊ классам Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня.
  • 13. IoC Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Π£ Π€Π°ΡƒΠ»Π΅Ρ€Π°: http://martinfowler.com/articles/injection.html Π”Π²Π° основных ΠΏΠ°Ρ‚Ρ‚Π΅Ρ€Π½Π°: 1. Service Locator 2. Dependency Injection (Π’Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π˜Π½ΡŠΠ΅ΠΊΡ†ΠΈΡ ЗависимостСй) http://ru.wikipedia.org/wiki/Dependency_Injection (Ρ€Π°Π·Π½ΠΈΡ†Π° Π² Ρ‚ΠΎΠΌ, Π½Π° ΠΊΠΎΠ³ΠΎ пСрСкладываСтся ΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимостями)
  • 14. Service Locator Π‘ΡƒΡ‚ΡŒ: зависимостями управляСт ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ServiceLocator
  • 15. Service Locator Π”Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ Π΅ΡΡ‚ΡŒ зависимости
  • 16. Dependency Injection Π‘ΡƒΡ‚ΡŒ: зависимый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Ρ€Π°Π½Π΅Π΅ пСрСдаСтся Ρ‡Π΅Ρ€Π΅Π· setter ΠΈΠ»ΠΈ конструктор. Зависимости Π‘Π±ΠΎΡ€ΠΊΠ°
  • 17. 3 шага ΠΊ Dependency Injection Π¨Π°Π³ 1. Getter/Setter Π¨Π°Π³ 2. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ (interface) Π¨Π°Π³ 3. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
  • 18. 3 шага ΠΊ Dependency Injection
  • 20. ИдСм дальшС: ΠΈΠ³Ρ€Π° Π² ΠΏΡΡ‚Π½Π°ΡˆΠΊΠΈ "Π”Π²ΠΈΠ³Π°Π΅ΠΌ" всС зависимости "Π½Π°Π²Π΅Ρ€Ρ…" Π² Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€:
  • 21. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€ создаСм Π½Π΅ прямо, Π° Ρ‡Π΅Ρ€Π΅Π· Π±Π΅Ρ€Π΅ΠΌ ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: Π§Π΅Π³ΠΎ Π΅Ρ‰Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹: - build ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° - shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, для возмоТности ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (ΠΏΡ€ΠΈ нСобходимости)
  • 22. Π§Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ DI? 1. Π›ΡŽΠ±ΠΎΠΉ класс Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ зависимостСй ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ 2. Код Π»Π΅Π³ΠΊΠΎ пСрСнСсти Π² Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ/ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 3. Один шаг Π² сторону ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ° Π΅Π΄ΠΈΠ½ΠΎΠΉ отвСтствСнности класса
  • 23. Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡƒΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Service Locator + ΠΎΡ‡Π΅Π½ΡŒ просто Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ (Π΄Π°ΠΆΠ΅ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚) - Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ + Π»Π΅Π³ΠΊΠΎ Π·Π°Π»ΠΎΠΆΠΈΡ‚ΡŒ Π΄Π΅Ρ„ΠΎΠ»Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ получСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° - слоТно ΠΏΠ΅Ρ€Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ DI + Π±ΠΎΠ»Π΅Π΅ управляСмый ΠΏΡ€ΠΈ сильном разрастании + обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ прозрачности ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΉ - практичСски Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ³ΠΎ внСдрСния Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ использованиС смСшаного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°
  • 24. ZF 1.* & Symfony DI Container
  • 25. PHP DI ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ 1. Symfony Dependency Injection 2. Pico Container 3. Yadif_Container 4. Phemto 5. .... (ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…)
  • 26. ВозмоТности Symfony DI 1. Π£Π΄ΠΎΠ±Π½ΠΎΠ΅ прСдставлСниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ (xml, yaml) 2. Π“ΠΈΠ±ΠΊΠΈΠ΅ возмоТности ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ‚ΠΎΡ€Π° 3. Dump собранного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π² php-ΠΊΠΎΠ΄ для увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 4. Shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 5. Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²
  • 29. DI Π² Zend Π’Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹: - ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для Application - ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ рСсурс - ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Bootstrap
  • 30. Как ΠΌΡ‹ поступим? ΠŸΡ€ΠΈΠΌ. ΠžΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ зависимостСй, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ° Π½Π΅ смотрим (helpers, plugins, View, request/response ΠΈ Ρ‚.Π΄.) 1. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π΅Π΄Ρ€Π΅Π½ Π² Bootstrap вмСсто стандартного Zend_Registry 2. Π’ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π΅Ρ€Π΅, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Helper - ServiceContainer Π­Ρ‚ΠΎ идСологичСски Service Locator. 3. PreDispatch-ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ (ServiceContainer helper) Sources https://github.com/kachayev/zfconf-speech
  • 32. Service locator helper - использованиС ΠŸΠ»ΡŽΡΡ‹ + простота ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ + Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒ "Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΠΎΠ³ΠΎ" внСдрСния ΠœΠΈΠ½ΡƒΡΡ‹ - "частичный" DI - ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ являСтся самодостаточным ΠΈ связан с helper-ΠΎΠΌ
  • 33. Dependency Injection ΠΏΡ€ΠΈ диспСчирСзации 1. Π’ helper-e добавляСм Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ preDispatch() - Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° FrontController-ΠΎΠΌ ΠΏΠ΅Ρ€Π΅Π΄ диспСчСризациСй ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° 2. ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π² Π½Π΅ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π° 3. Π§Π΅Ρ€Π΅Π· Zend_Reflection_Class Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ свойста ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ наличия @Inject Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ 4. Π˜Π½ΡŠΠ΅ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ зависимости (Ρ‡Π΅Ρ€Π΅Π· setter ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Ρ„Π»Π΅ΠΊΡ†ΠΈΡŽ)
  • 34. Dependency Injection ΠΏΡ€ΠΈ диспСчирСзации ΠŸΠ»ΡŽΡΡ‹ + Ρ‚Π΅ ΠΆΠ΅ ΠœΠΈΠ½ΡƒΡΡ‹ - ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ Π½Π΅ являСтся самодостаточным ΠΈ связан с Ρ†ΠΈΠΊΠ»ΠΎΠΌ диспСчирСзации
  • 35. DI - ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ НСгативный ΠΌΠΎΠΌΠ΅Π½Ρ‚ DI - "ΠΏΡ€ΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΡΡ‚ΡŒ" ΠΊ inject- ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Exception-Π°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅: БСзопаснСС - RuntimeException()
  • 36. DI - lazy loading Иногда Π±Ρ‹Π²Π°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ с "тяТСлыми" ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ Π² ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ зависимостСй. UserService->AuthProvider->AuthAdapter->DbConnection Но DbConnection ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ пригодится. РСшСниС - Ρ„Π°Π±Ρ€ΠΈΠΊΠ°.
  • 37. DI - unit-тСстированиС 1. Π›ΡŽΠ±ΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ собран Π½Π° любом ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ зависимостСй, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ протСстирован ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. 2. Π‘Π±ΠΎΡ€ΠΊΠ° тСстируСмых ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ проводится ΠΊΠ°ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ тСстовый ΠΊΠΎΠ½Ρ„ΠΈΠ³), Ρ‚Π°ΠΊ ΠΈ Π² "Ρ€ΡƒΡ‡Π½ΠΎΠΌ" Ρ€Π΅ΠΆΠΈΠΌΠ΅ (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ DI-ready Π² Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°).
  • 38. АнтипаттСрны IoC: Ρ‡Ρ‚ΠΎ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ зависимостями
  • 39. АнтипаттСрны НС-injectable: 1. Singleton - замСняСтся Π½Π° shared-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 2. Static class - ΠΎΡ‚ΠΏΠ°Π΄Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½ΡŠΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ 3. Cross-reference - ΠΎΠ±ΡŠΠΊΡ‚Ρ‹ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Bootstrap->FrontController->Bootstrap
  • 40. АнтипаттСрны НС-Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅: 4. "Π‘Π»ΡƒΠΆΠ΄Π°ΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€" - зависимости ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½ΠΎ сам ΠΊΠΎΠΉΠ½Π΅ΠΉΠ½Π΅Ρ€ пСрСдаСтся (injected) Π²Π½ΠΈΠ· ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ
  • 42. IoC Π² Zend Framework 2007 Π³ΠΎΠ΄ Zend_Di component proposal (Federico Cargnelutti) http://framework.zend.com/wiki/display/ZFPROP/Zend_Di+- +Federico+Cargnelutti НСпринято ΠΈΠ·-Π·Π° комплСксности 2008 Π³ΠΎΠ΄ Zend_Container component proposal (Bradley Holt) http://framework.zend.com/wiki/display/ZFPROP/Zend_Container+- +Bradley+Holt
  • 43. IoC Π² Zend Framework 2.0 Matthew Weier O'Phinney "Zend Framework 2 Patterns" Roadmap... - ... - Inversion of Control 1. Service Locator 2. Dependency Injector (Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ ZF 2.0 Roadmap ΠΈΡ… Π½Π΅Ρ‚)
  • 44. IoC Π² Zend Framework 2.0 10 ΠœΠ°Ρ€Ρ‚Π°, 2011 Proposal for ServiceLocator and DependencyInjector (http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+ServiceLocator+and+Dep endencyInjector) ΠŸΡ€ΠΈΠΌΠ΅Ρ€ использования Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² https://github.com/weierophinney/zf-examples/tree/projects%2Fzf2.di/zf2-di Π’Ρ‹Π·Π²Π°Π»ΠΎ достаточно Π±ΡƒΡ€Π½ΠΎΠ΅ обсуТдСниС Π² рассылкС ΠΊΠΎΠ½Ρ‚Ρ€ΠΈΠ±ΡŒΡŽΡ‚ΠΎΡ€ΠΎΠ². Π—Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: лицСнзия ZF Π½Π΅ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.
  • 45. IoC Π² Zend Framework 2.0 ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² Proposal ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ достаточно искусствСнны ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹. Π’ΠΈΠΏΠ° Ρ‚Π°ΠΊΠΎΠ³ΠΎ:
  • 46. IoC Π² Zend Framework 2.0 Π§Ρ‚ΠΎ Π½Π΅ Π΄Π°Π΅Ρ‚ возмоТности ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ ΠΎΡ‚ смСшивания ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π² Π½Π΅ΠΊΠΈΠΉ DI based Service Locator (ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° java-ский Avalon Framework):