Цитата (chee @ 12.04.2016 - 10:51) |
концепция описана в readme на гите, у меня такое ощущение что ты ее не читал. |
Пример. Пример. Программисты всегда ищут толковый пример, а не концепцию. ))
Цитата (twin @ 12.04.2016 - 11:18) |
Слуш, а у тебя CMS так же работает? Я вот не пойму, в чем профит от такого конейнера. Ты запретил конструкторы, второй объект инициализировать нельзя просто так. А чем это от статики отличается?
|
Да, система работает на этом контейнере. То есть вся функциональность которая в нём есть - востребована и решает реальные проблемы.
Цитата (twin @ 12.04.2016 - 11:18) |
А чем это от статики отличается?
|
Я так понимаю, тебя смущают такие вызовы
$container->get('App\FieldFactory')
$container->get('Ron\MysqlWrapper');
Ну так вот, в моей системе, таких вызовы есть или только в фабриках и то на основе примера выше, ну и
при подготовке приложения. Да, есть схожесть со статикой, ведь мы все также в приложении указываем конкретные классы. Это как бы проблема и в тоже время нет.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (twin @ 12.04.2016 - 12:09) |
Ну ты же в паблик выкатил его. У тебя нет, у меня есть. Как юзать? Мне может вообще фабрика без надобности. Городить её из-за одной копии объекта? |
Ну ок, вот тебе клонирование существуюшего объекта
<?php
namespace App;
class B
{
}
class A implements \Cheevuava\Contract\Container\UseServiceLocator
{
protected $container;
public function setContainer($container)
{
$this->container = $container;
}
public function iNeedMoreInstance()
{
$b = clone $this->container->get('b');
}
}
$container = new Cheevauva\Container(array(
'App\A' => array(
'b' => 'App\B',
),
));
$container->get('App\A')->iNeedMoreInstance();
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 12.04.2016 - 08:22) |
Да, есть схожесть со статикой, ведь мы все также в приложении указываем конкретные классы. |
Странно просто. Взять объект и превратить его в статику А ООП где...
Цитата (chee @ 12.04.2016 - 08:27) |
Ну ок, вот тебе клонирование существуюшего объекта |
Блин, вот ты серьёзно? Тебе вера не позволет еще один метод сунуть туда?
$container->get('App\A');
$container->shared('App\A');
Такую городушку городить из за одной строчки...
В пимпле, всеми любимом, вот такое есть, не стесняются же:
$container['session'] = $container->factory(function ($c) {
return new Session($c['session_storage']);
});
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 12.04.2016 - 12:38) |
В пимпле, всеми любимом, вот такое есть, не стесняются же: |
я так смотрю, ты вообще не видишь разницы в описании зависимостей руками и метаданными.
Цитата (twin @ 12.04.2016 - 12:38) |
Блин, вот ты серьёзно? Тебе вера не позволет еще один метод сунуть туда? |
$container->shared('App\A');
Потому что это равносильно
clone $container->get('App\A');
Бесмысленно это делать в библиотеке.
UPDATE:
В этом утверждении я не прав, не разоабрался как работает shared
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
bestxp
12.04.2016 - 14:23
не твоя поделка получилась куда сложнее и менее функциональная чем тот же SymfonyDi или pimple
реально Pimple
$app['single_instance'] = $app->share(function(){ return new SingleInstance(); });
$app['factory_instance'] = function() {return new stdObject;};
всегда Di возвращает новый инстанс если не описано обратное в виде shared , расшаренного для всех
если надо расширить то пожайлуста,
$app['factory_instance'] = $app->extend('factory_instance', function($instance, $app) { $instance->setApp($pp); return $instance});
да я руками описываю зависимости, но это лучше массива конфигов, на крайняк проще подружить с yaml и куда нагляднее станет =) но это уже будет пахнуть Симфони)
твой инструмент пока только привязан к твоей CMS концепция концепцией, а поставленные задачи решать не может, указать нельзя как будет себя вести тот или иной объект, как фабрика или как одиночка, по сути вся твоя система эта построена на одиночке =( только вот в такой извращенной форме)
bestxp
12.04.2016 - 14:25
Цитата (chee @ 12.04.2016 - 14:21) |
Цитата (twin @ 12.04.2016 - 12:38) | В пимпле, всеми любимом, вот такое есть, не стесняются же: |
я так смотрю, ты вообще не видишь разницы в описании зависимостей руками и метаданными.
Цитата (twin @ 12.04.2016 - 12:38) | Блин, вот ты серьёзно? Тебе вера не позволет еще один метод сунуть туда? |
$container->shared('App\A'); Потому что это равносильно clone $container->get('App\A');
Бесмысленно это делать в библиотеке. |
clone и new совсем разные вещи и поведение может быть абсолютно разным, поэтому подменять понятие не стоит, если поведение фабрика значит каждый раз собираются зависимости в том виде как описаны для них конфигурации либо отдается всегда один и тот же интерфейс
clone может изменить конфигурацию класса так что использовать его как новый объект не получиться, не путай плиз понятия
Цитата (chee @ 12.04.2016 - 10:21) |
Потому что это равносильно |
Да ладно? :)
А вот так если?
namespace Ron;
class Config
{
public $test = 'test-1';
}
class MysqlWrapper
{
public $config;
}
$container = new Container(array(
'Ron\MysqlWrapper' => array(
'config' => 'Ron\Config',
),
));
$obj1 = $container->get('Ron\MysqlWrapper');
$obj2 = clone $obj1;
$obj2->config->test = 'test-2';
echo $obj1->config->test;
echo $obj2->config->test;
bestxp Уже ответил успел. :)
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (bestxp @ 12.04.2016 - 14:23) |
да я руками описываю зависимости, но это лучше массива конфигов |
Чем лучше то? Аргументация нужна, а лучше плюсы и минусы, описания через метаданные как у меня и описание через код вручную, как в Pimple.
Цитата (bestxp @ 12.04.2016 - 14:23) |
не твоя поделка получилась куда сложнее и менее функциональная чем тот же SymfonyDi или pimple |
Гораздо менее сложнее Symfony DI, не функциональнее Symfony DI, не сложнее Pimple,
менее функциональна чем Pimple.
$app['factory_instance'] = $app->extend('factory_instance', function($instance, $app) { $instance->setApp($pp); return $instance});
И этот человек говорит о сложности моего контейнера?
Цитата (bestxp @ 12.04.2016 - 14:23) |
поставленные задачи решать не может |
А кто сказал, что вот это
Цитата (bestxp @ 12.04.2016 - 14:23) |
указать нельзя как будет себя вести тот или иной объект, как фабрика или как одиночка |
поставленые перед этим контейнером задачи
Цитата (bestxp @ 12.04.2016 - 14:23) |
по сути вся твоя система эта построена на одиночке |
Да, выше я об этом твину писал. Используя этот контейнер, сам программист уже должен решать, что ему оставлять как shared, а что клонировать.
Цитата (bestxp @ 12.04.2016 - 14:25) |
clone может изменить конфигурацию класса так что использовать его как новый объект не получиться, не путай плиз понятия |
Вот это, единственное нормальное замечания и об этом пункте я подумаю.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (bestxp @ 12.04.2016 - 14:23) |
твой инструмент пока только привязан к твоей CMS |
Вот посмотри на мою CMS, там ведь можно подменить контейнер? Отвечу, да. И это можно сделать незаметно. Так каким же образом контейнер привязан к моей CMS.
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 12.04.2016 - 11:03) |
Вот посмотри на мою CMS, там ведь можно подменить контейнер? Отвечу, да. И это можно сделать незаметно. Так каким же образом контейнер привязан к моей CMS.
|
Это получается CMS не привязана к контейнеру, раз она может работать с любым. А контейнер в другой концепции нормально работать не будет. Так что все верно. Привязан, еще как.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (chee @ 12.04.2016 - 10:55) |
Чем лучше то? Аргументация нужна, а лучше плюсы и минусы, описания через метаданные как у меня и описание через код вручную, как в Pimple. |
Мне вот много есть что сказать по этому поводу. Но я по порядку хочу. Дождусь твоего решения по shared.
Собственно у тебя два пути. Все таки сделать этот метод, или убрать из концепции это:
Цитата |
Простой и в тоже время мощный контейнер внедрения зависимостей |
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
twin, а зачем мне это убирать, нет противоречия. Я уже ответил в самом начеле почему этот контейнер разрабатывался. Вы тут зацепились за его особенности и различия (а именно за концепцию). Возникает резоный вопрос: зачем мне делать контейнер, в котором будут концепции, что и в других контейнерах?
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Цитата (chee @ 12.04.2016 - 11:30) |
Возникает резоный вопрос: зачем мне делать контейнер, в котором будут концепции, что и в других контейнерах? |
Именно потому, что ты сам обозначил одной из целей своих поползновений это:
Цитата (chee @ 26.03.2016 - 08:03) |
Ну и последнее, я вырвал этот контейнер из CMS'ки, потому что его нужно дать программисту, который будет строить ООП систему в качестве обучения |
Я предполагаю, что ты хочешь этого программиста ООП обучить? Так и учи правильно, раз взялся.
А это не ООП. Такой контейнер я тебе на статике за 15 минут нарисую. Это подмена чистой воды. Ты же не любишь, когда классы как сборник функций используют. А сам чему учишь?
Ну а для широкой публики он вообще не годится.
UPD. И еще. Твоя концепция (CMS), это тоже не ООП. Это суррогат какой то. Оверинжениринг. Я обосную попозже. С этим реши что делать будешь.
_____________
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.
Цитата (twin @ 12.04.2016 - 15:39) |
Такой контейнер я тебе на статике за 15 минут нарисую. |
И как ты будешь его внедрять в другие объекты, вызывать методы у статического класса? Ты видимо совсем не понимаешь, что хоть у этого DI и своя концепция, отличная от других, но по факту контейнер делает-то что нужно - управляет зависимостями. Мне серьезно хочется посмотреть на твою реализацию, такого контейнера на статике.
Цитата (twin @ 12.04.2016 - 15:11) |
А контейнер в другой концепции нормально работать не будет. Так что все верно. Привязан, еще как. |
Окей, согласен. Но для меня важно, что мой контейнер подменяем и если я захочу, то тупо смогу заменить его на другой, без особого гемороя. Главное в контейнере зависимостей, что бы он позволял компоненты системы абстрагировать друг от друга, сделать их легко подменяемымы, то как это делает тот или иной контейнер, уже дело самого контейнера и его идеологии.
Цитата (twin @ 12.04.2016 - 15:39) |
Ну а для широкой публики он вообще не годится. |
Возможно да, а возможно и нет. Все субъективно.
Цитата (twin @ 12.04.2016 - 15:39) |
Твоя концепция (CMS), это тоже не ООП. Это суррогат какой то. |
https://www.youtube.com/watch?v=ecaYvEwth44
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.