summaryrefslogtreecommitdiff
path: root/content/digarden/pages/20211210234818-dependency_injection.org
diff options
context:
space:
mode:
Diffstat (limited to 'content/digarden/pages/20211210234818-dependency_injection.org')
-rw-r--r--content/digarden/pages/20211210234818-dependency_injection.org117
1 files changed, 0 insertions, 117 deletions
diff --git a/content/digarden/pages/20211210234818-dependency_injection.org b/content/digarden/pages/20211210234818-dependency_injection.org
deleted file mode 100644
index fbac036..0000000
--- a/content/digarden/pages/20211210234818-dependency_injection.org
+++ /dev/null
@@ -1,117 +0,0 @@
-:PROPERTIES:
-:ID: 49387584-0ee5-42ab-bc90-648062e74a91
-:END:
-#+title: Dependency Injection
-* Dependency Injection
-Часть инверсии контроля, которая занимается инициализацией объектов и их
-зависимостей обычно в единственном экземпляре. Объекты обычно передают в
-аргументах функций-конструкторов класса, а штука находящая объекты
-называется сервис-локатором.
-
-Суть паттерна заключается в том, чтобы не инициализировать лишний раз в
-конструкторе объекты вручную и не инициализировать лишний раз экземпляры
-классов в принципе (IoC).
-
-*Сервис-контейнер* -- класс, инициализирующий различные объекты, которые в
-последствии хранит в одном из своих полей.
-
-*Сервис* -- объекты, управляемые сервис-контейнером.
-
-*Реализации:*
-+ Java
- http://picocontainer.com/
-+ Python
- https://github.com/ets-labs/python-dependency-injector
-
-*PHP и Symfony:*
-http://fabien.potencier.org/what-is-dependency-injection.html
-+ Dependency Injection без контейнеров
-#+begin_src php
- class User
- {
- function __construct($storage)
- {
- $this->storage = $storage;
- }
-
- // ...
- }
-
- $storage = new SessionStorage('SESSION_ID');
- $user = new User($storage);
-#+end_src
-
-+ Реализация возврата объекта в единственном экземпляре
-#+begin_src php
- class Container
- {
- static protected $shared = array();
-
- // ...
-
- public function getMailer()
- {
- if (isset(self::$shared['mailer']))
- {
- return self::$shared['mailer'];
- }
-
- $class = $this->parameters['mailer.class'];
-
- $mailer = new $class();
- $mailer->setDefaultTransport($this->getMailTransport());
-
- return self::$shared['mailer'] = $mailer;
- }
- }
-#+end_src
-
-+ Реализация сервис-контейнера
-#+begin_src php
- class Container
- {
- static protected $shared = array();
-
- protected $parameters = array();
-
- public function __construct(array $parameters = array())
- {
- $this->parameters = $parameters;
- }
-
- public function getMailTransport()
- {
- return new Zend_Mail_Transport_Smtp('smtp.gmail.com', array(
- 'auth' => 'login',
- 'username' => $this->parameters['mailer.username'],
- 'password' => $this->parameters['mailer.password'],
- 'ssl' => 'ssl',
- 'port' => 465,
- ));
- }
-
- public function getMailer()
- {
- if (isset(self::$shared['mailer']))
- {
- return self::$shared['mailer'];
- }
-
- $class = $this->parameters['mailer.class'];
-
- $mailer = new $class();
- $mailer->setDefaultTransport($this->getMailTransport());
-
- return self::$shared['mailer'] = $mailer;
- }
- }
-
-#+end_src
-
-*Ресурсы*
-- Книга на 500+ страниц про Dependency Injection
- https://livebook.manning.com/book/dependency-injection/
-
-** DI фреймворки и библиотеки
-*** PHP
-- [[https://github.com/silexphp/Pimple][Pimple]] (Минималистичный DI контейнер)