[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDIC - Property Dependency Injection Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
chee
Короче почитал документацию про тэги, какая то дичь, серьезно. Такие простые вещи, а сделаны так сложно, да и на том же Pimple, такое реализуется куда лучше

$container['transport_chain'] = function (container) {
$transportChain = new TransportChain;
$transportChain->addTransport($container['transport_sendmail']);
$transportChain->addTransport($container['transport_smtp']);

return $transportChain;
};

если конечно я правильно понимая работу самого Pimple и тэгов в Symfony Di, хотя может и пример они выбрали неудачный

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
Это. А ты в курсе, что во фреймворке Slim используется Pimple?

И да, нужен лайтовый пример, лучше всего сразу много и классы чтобы привязаны были к жизни, а не ExampleA и т.д. От таких названий в глазах рябит, они все выглядят одинаково при беглом взгляде. Приходится вчитываться и ваще такой пример читать безумно трудно.

Цитата (chee @ 26.03.2016 - 12:03)
который будет строить ООП систему в качестве обучения, при этом система должна будет строиться на основе какого-то DI контейнера.

Зачем тебе такой гемор? Лучше бы дал тот же Pimple по нему документация есть раз, и второе - сообществу о нем хорошо известно. Можно задавать вопросы на форумах, гуглить и т.д.

Так получилось, что ты гемор себе обрел. Все вопросы к тебе. И по доке и по всему.

Да ты б хоть UML диаграммку что ли чирканул, раз для обучения-то! wink.gif

chee
Цитата (Ron @ 11.04.2016 - 22:33)
А ты в курсе, что во фреймворке Slim используется Pimple?

И, что?
Цитата (Ron @ 11.04.2016 - 22:33)
И да, нужен лайтовый пример, лучше всего сразу много и классы чтобы привязаны были к жизни, а не ExampleA и т.д. От таких названий в глазах рябит, они все выглядят одинаково при беглом взгляде. Приходится вчитываться и ваще такой пример читать безумно трудно.

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

На счет живого примера, пожалуйста:
Инициализация, хотя тут другой немного вариант этого контейнера
Описание зависимостей в проекте

Цитата (Ron @ 11.04.2016 - 22:33)
Зачем тебе такой гемор? Лучше бы дал тот же Pimple по нему документация есть раз, и второе - сообществу о нем хорошо известно. Можно задавать вопросы на форумах, гуглить и т.д.

боже мой, это тупо контейнеры зависимостей, какие по ним могут быть вопросы? Ты все переусложняешь. Это же не Symfony DI с кучей всяких свистелок.



Цитата (Ron @ 11.04.2016 - 22:33)
Так получилось, что ты гемор себе обрел. Все вопросы к тебе. И по доке и по всему.

Да ты б хоть UML диаграммку что ли чирканул, раз для обучения-то

Какой гемор? Ты о чём? Некоторые замечание годные, некоторые просто дело вкуса. Какую UML диаграмку? Тут класс на 100 строк, с одной обязанностью - управлять зависимостями.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
chee, так чего я получу-то? Что описывается в метадате? У меня объект mysqlwrapper зависит от объекта config. Я хочу чтобы мне mysqlwrapper прилетел подготовленный, с проинжекченным в его конструктор объектом config. Как этого добиться?

Что я получу после вот этого вызова? $this->getContainer()->get('ExampleCMS\\Application');
Коллекцию обектв, описанных через array метадаты?

Я вот честно не понимаю как это всё юзать. Pimple открыл, сразу всё понятно. Здесь мне придется копать (трейсить) твой код. А я желанием не горю. =)
chee
Цитата (Ron @ 12.04.2016 - 00:39)
chee, так чего я получу-то? Что описывается в метадате? У меня объект mysqlwrapper зависит от объекта config.


namespace Ron;

class Config
{
}


class MysqlWrapper
{
public $config;
}

$container = new \Cheevauva\Container(array(
'Ron\MysqlWrapper' => array(
'config' => 'Ron\Config',
),
));


$container->get('Ron\MysqlWrapper'); // Получим объект с внедреными зависимостями



Цитата (Ron @ 12.04.2016 - 00:39)
Pimple открыл, сразу всё понятно. Здесь мне придется копать (трейсить) твой код. А я желанием не горю. =)

Проблема в том, что ты не понимаешь концепцию. Странно конечно, учитывая что она простая.

Цитата (Ron @ 12.04.2016 - 00:39)
Что я получу после вот этого вызова? $this->getContainer()->get('ExampleCMS\\Application');

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

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
О боги, ты меня заставил-таки заглянуть в код. ))) Ок, я всё понял, только нафига выставлять зависимости в свойства? Конструктор ведь отработает уже к этому времени, а мне нужно, например, перед использованием чего-нибудь сделать с прилетевшей зависимостью. Ну я не знаю, дослать какие-нибудь флаги или конфиг. И вообще заполнить свои свойства из геттеров зависимости - ХЗ. =)

Или это у тебя через медиатор делается? Походу да. Ок, ясн понятн. )
twin
Это помоему с проекта прилипло?
Цитата (Ron @ 11.04.2016 - 22:13)
О боги, ты меня заставил-таки заглянуть в код. )))

Никогда мне вас, оопэшников, не понять.... Три дня расуждать о том, чего даже не видел. smile.gif


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

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

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

user posted image
Ron
Цитата (twin @ 12.04.2016 - 02:45)
Никогда мне вас, оопэшников, не понять.... Три дня расуждать о том, чего даже не видел.

И? Что? =) Зачем мне смотреть в чужой код? Описания преимуществ и хорошей доки по использованию более чем достаточно. =)
twin
Я бы от любопытства помер. smile.gif

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

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

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

user posted image
twin
chee
Не врубаюсь, а как второй объект получить? Снова в другой контейнер прописывать?

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

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

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

user posted image
chee
twin, второй обьект будет в свойстве $config первого.

Ron, видимо твоя проблема была в том что ты думал об этом контейнере как о pimple, проецировал его методы работы на это решение. Для таких случаев доки не сработают wink.gif

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Ron
Цитата (chee @ 12.04.2016 - 10:10)
Для таких случаев доки не сработают wink.gif

Вот как раз для таких случаев дока и нужна. =) Причем лучше всего с описанием алгоритма. Ну это может быть и лишнее, вполне достаточно хорошего примера с комментариями.
chee
Ron, концепция описана в readme на гите, у меня такое ощущение что ты ее не читал.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 12.04.2016 - 06:10)
второй обьект будет в свойстве $config первого.

Не догоняю. Покажи на примере плиз.

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

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

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

user posted image
bestxp
Цитата (chee @ 11.04.2016 - 21:34)
Короче почитал документацию про тэги, какая то дичь, серьезно. Такие простые вещи, а сделаны так сложно, да и на том же Pimple, такое реализуется куда лучше
<pre class="sh_sourceCode" rel="php">
<span class="sh_variable">$container</span><span class="sh_symbol">[</span><span class="sh_string">'transport_chain'</span><span class="sh_symbol">] =</span> <span class="sh_function">function</span> <span class="sh_symbol">(</span>container<span class="sh_symbol">)</span> <span class="sh_cbracket">{</span>
<span class="sh_variable">$transportChain</span> <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> TransportChain<span class="sh_symbol">;</span>
<span class="sh_variable">$transportChain</span><span class="sh_symbol">-></span><span class="sh_function">addTransport</span><span class="sh_symbol">(</span><span class="sh_variable">$container</span><span class="sh_symbol">[</span><span class="sh_string">'transport_sendmail'</span><span class="sh_symbol">]);</span>
<span class="sh_variable">$transportChain</span><span class="sh_symbol">-></span><span class="sh_function">addTransport</span><span class="sh_symbol">(</span><span class="sh_variable">$container</span><span class="sh_symbol">[</span><span class="sh_string">'transport_smtp'</span><span class="sh_symbol">]);</span>

<span class="sh_control">return</span> <span class="sh_variable">$transportChain</span><span class="sh_symbol">;</span>
<span class="sh_cbracket">}</span><span class="sh_symbol">;</span>
</pre>
если конечно я правильно понимая работу самого Pimple и тэгов в Symfony Di, хотя может и пример они выбрали неудачный

Немного не верно теги это так сказать способ описать несколько зависимостей
отчасти то что ты показал как в pimple скорее будет выглядеть так ( это скорее псевдокод )



$container['service'] = function(Container $container) {

$service = new MySerice();

foreach($container->getTags('service.transport') as $tag){
$service->addTransport($tag);
}

return $service;

]


а тегнутые сервисы описываються так же как обычные, только у них есть доп параметер как тег

в симфони например через DI так описываются кастомные поля формы, да и много чего)

ps чето сломался форум после цитирования =(
Быстрый ответ:

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