IoC в php
Читал-читал про инверсию управления (Inversion of Control), всякие Pico и Phemto.
Долго не мог понять, зачем может понадобиться что-то вроде этого
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
interface Number { function getValue(); } class One implements Number { function getValue() { return 1; } } class Two implements Number { function getValue() { return 2; } } class Adder implements Number { public $result; function __construct(One $a_one, Two $a_two) { $this->result = $a_one->getValue() + $a_two->getValue(); } function getValue() { return $this->result; } } // использование $injector = new Phemto(); $injector->register('One'); $injector->register('Two'); $injector->register('Adder'); $result = $injector->instantiate('Adder'); $this->assertEqual($result->result, 3); |
Потом случайно услышал одного умного человека, который сказал, что тоже не понимает, зачем нужен IoC Container в динамических языках. И тут-то я наконец осознал, что действительно есть языки со статической типизацией (тыщу лет такими уже не пользуюсь), и весь этот мегапаттерн — это на самом деле мегакостыль, чтобы пользоваться преимуществами динамического языка. Так что если кто-то мне скажет про то, как IoC исключительно полезен в том же PHP или Python, я или засмеюсь, или очень внимательно послушаю, что же я такого в этом мире не понимаю. Другое дело — Dependency Injection (Constructor Injection или Setter Injection, когда-нибудь напишу отдельный про это, а пока умная мысль, которую подслушал: «Setter Injection в принципе лучше использовать только при циклических зависимостях объектов»).
Ссылки по теме:
http://martinfowler.com/bliki/InversionOfControl.html
http://martinfowler.com/articles/injection.html
http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code
http://code.google.com/p/ovo-container/
http://wiki.agiledev.ru/doku.php?id=ooad:dependency_injection
Similar Posts
- None Found
LEAVE A COMMENT
Для отправки комментария вам необходимо авторизоваться.