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

Пример. Пример. Программисты всегда ищут толковый пример, а не концепцию. ))

chee
Цитата (twin @ 12.04.2016 - 11:18)
Слуш, а у тебя CMS так же работает? Я вот не пойму, в чем профит от такого конейнера. Ты запретил конструкторы, второй объект инициализировать нельзя просто так. А чем это от статики отличается?

Да, система работает на этом контейнере. То есть вся функциональность которая в нём есть - востребована и решает реальные проблемы.
Цитата (twin @ 12.04.2016 - 11:18)
А чем это от статики отличается?

Я так понимаю, тебя смущают такие вызовы

$container->get('App\FieldFactory')
$container->get('Ron\MysqlWrapper');


Ну так вот, в моей системе, таких вызовы есть или только в фабриках и то на основе примера выше, ну и при подготовке приложения. Да, есть схожесть со статикой, ведь мы все также в приложении указываем конкретные классы. Это как бы проблема и в тоже время нет.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (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();


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (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']);
});


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

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

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

user posted image
chee
Цитата (twin @ 12.04.2016 - 12:38)
В пимпле, всеми любимом, вот такое есть, не стесняются же:

я так смотрю, ты вообще не видишь разницы в описании зависимостей руками и метаданными.

Цитата (twin @ 12.04.2016 - 12:38)
Блин, вот ты серьёзно? Тебе вера не позволет еще один метод сунуть туда?

$container->shared('App\A');

Потому что это равносильно

clone $container->get('App\A');

Бесмысленно это делать в библиотеке.

UPDATE: В этом утверждении я не прав, не разоабрался как работает shared

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
bestxp
не твоя поделка получилась куда сложнее и менее функциональная чем тот же 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
Цитата (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 может изменить конфигурацию класса так что использовать его как новый объект не получиться, не путай плиз понятия
twin
Цитата (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; //test-2
echo $obj2->config->test; //test-2


bestxp Уже ответил успел. :)

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

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

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

user posted image
chee
Цитата (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 может изменить конфигурацию класса так что использовать его как новый объект не получиться, не путай плиз понятия

Вот это, единственное нормальное замечания и об этом пункте я подумаю.

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

Вот посмотри на мою CMS, там ведь можно подменить контейнер? Отвечу, да. И это можно сделать незаметно. Так каким же образом контейнер привязан к моей CMS.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 12.04.2016 - 11:03)
Вот посмотри на мою CMS, там ведь можно подменить контейнер? Отвечу, да. И это можно сделать незаметно. Так каким же образом контейнер привязан к моей CMS.

Это получается CMS не привязана к контейнеру, раз она может работать с любым. А контейнер в другой концепции нормально работать не будет. Так что все верно. Привязан, еще как.

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

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

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

user posted image
twin
Цитата (chee @ 12.04.2016 - 10:55)
Чем лучше то? Аргументация нужна, а лучше плюсы и минусы, описания через метаданные как у меня и описание через код вручную, как в Pimple.

Мне вот много есть что сказать по этому поводу. Но я по порядку хочу. Дождусь твоего решения по shared.

Собственно у тебя два пути. Все таки сделать этот метод, или убрать из концепции это:
Цитата
Простой и в тоже время мощный контейнер внедрения зависимостей


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

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

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

user posted image
chee
twin, а зачем мне это убирать, нет противоречия. Я уже ответил в самом начеле почему этот контейнер разрабатывался. Вы тут зацепились за его особенности и различия (а именно за концепцию). Возникает резоный вопрос: зачем мне делать контейнер, в котором будут концепции, что и в других контейнерах?

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

Именно потому, что ты сам обозначил одной из целей своих поползновений это:
Цитата (chee @ 26.03.2016 - 08:03)
Ну и последнее, я вырвал этот контейнер из CMS'ки, потому что его нужно дать программисту, который будет строить ООП систему в качестве обучения

Я предполагаю, что ты хочешь этого программиста ООП обучить? Так и учи правильно, раз взялся.

А это не ООП. Такой контейнер я тебе на статике за 15 минут нарисую. Это подмена чистой воды. Ты же не любишь, когда классы как сборник функций используют. А сам чему учишь? smile.gif

Ну а для широкой публики он вообще не годится.

UPD. И еще. Твоя концепция (CMS), это тоже не ООП. Это суррогат какой то. Оверинжениринг. Я обосную попозже. С этим реши что делать будешь.

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

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

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

user posted image
chee
Цитата (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

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

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