[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Очередной холивар по методологиям
Страницы: 1, 2, 3, 4, 5, 6, 7
Arh
chee
Цитата
Arh, думай как хочешь

А можно думать как то по другому?

chee
Цитата
где это написано? Кто эти многие?

Могут быть баги и неудобства, связанные с тем, что в свойство можно сделать инъекцию только после создания объекта. То есть сделать в конструкторе какую то стартовую настройку, получить данные с кэша или еще что на основе инъекций не получится.



_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2
twin
Цитата (chee @ 6.04.2016 - 16:46)
где это написано? Кто эти многие?

Я не веду дневник, где записываю фамилии smile.gif На хабре встречал такие мнения, в статьях, когда рыл информацию о DI.

Но вот из того, что последнее читал, про сервис-локатор здесь, раньше где то ссылки приводил, лень искать.

Он же про Property Injection. Не так резко, но все же.

У Фаулера в его знаменитой статье (хороший перевод кстати) нет даже намека на возможность таких инъекций. Не думаю, что он о них не знает, просто считает, что они даже упоминания не стоят.

Ну и для полноты картины, не про DI, а про общие принципы вот это. Вообще чувак прикольно пишет. Я прям зачитывался. smile.gif

_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
chee
Цитата (twin @ 6.04.2016 - 21:53)
Он же про Property Injection. Не так резко, но все же.

Ему отвечают http://sergeyteplyakov.blogspot.ru/2013/01...085231387725747. Статейка само по себе - предостережение, ничего осуждающего такой подход, в ней нет.

По остальным ссылкам ничего конкретного.

Цитата (Arh @ 6.04.2016 - 21:22)
То есть сделать в конструкторе какую то стартовую настройку, получить данные с кэша или еще что на основе инъекций не получится.

Нет, не получится. Больше скажу конструкторы в компонентах моей CMS запрещены. Но если зависимости все таки нужно внедрять через конструктор, то для этого в моём контейнере есть посредник, который может подготовить любой объект, и поместить его в контейнер.

Вот пример

<?php

namespace ExampleCMS;

class Logger implements \ExampleCMS\Contract\Container\Mediator
{

public function get()
{
$name = $this->config->get('base.logger.name');
$level = $this->config->get('base.logger.level');
$filename = $this->config->getBasePath() . $this->config->get('base.logger.path');
$levels = \Monolog\Logger::getLevels();

return new \Monolog\Logger($name, array(
new \Monolog\Handler\StreamHandler($filename, $levels[$level])
));

}
}



У контейнера будет запрошен ExampleCMS\Logger, но когда контейнер инициализирует этот объект, то он посмотрит у него интерфейс и если интерфейс \ExampleCMS\Contract\Container\Mediator, то вызовет у объекта метод get, который должен будет вернуть конечную зависимость, которая в последствии и будет положена в контейнер под ключом ExampleCMS\Logger

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.