Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (8) « Первая ... 2 3 [4] 5 6 ... Последняя » ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Мой DI контейнер
Ron  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1048
Пользователь №: 41686
На форуме: 1 год, 4 месяца, 1 день
Карма: 14




Цитата (chee @ 12.04.2016 - 10:51)
концепция описана в readme на гите, у меня такое ощущение что ты ее не читал.

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



--------------------
Жду 5.11.2017
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




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

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

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

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


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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




Цитата (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();


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 7 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 17 дней


Цитата (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
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




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

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

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

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

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

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

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

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 22 дня
Карма: 111




не твоя поделка получилась куда сложнее и менее функциональная чем тот же 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 концепция концепцией, а поставленные задачи решать не может, указать нельзя как будет себя вести тот или иной объект, как фабрика или как одиночка, по сути вся твоя система эта построена на одиночке =( только вот в такой извращенной форме)


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
bestxp  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



орангутанг
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2004
Пользователь №: 36605
На форуме: 3 года, 9 месяцев, 22 дня
Карма: 111




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


--------------------
PMПисьмо на e-mail пользователюСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 7 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 17 дней


Цитата (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
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




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

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




Цитата (bestxp @ 12.04.2016 - 14:23)
твой инструмент пока только привязан к твоей CMS

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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 7 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 17 дней


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

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 7 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 17 дней


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

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

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




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


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 15562
Пользователь №: 6543
На форуме: 8 лет, 2 месяца, 7 дней
Карма: 299

Трезвый :
5 лет, 11 месяцев, 17 дней


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

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

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

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

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

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


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

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

Зачем ворошить старое, когда можно наворотить новое?

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
chee  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Сын полка
Сообщений: 1780
Пользователь №: 38654
На форуме: 2 года, 11 месяцев, 7 дней
Карма: 40




Цитата (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), это тоже не ООП. Это суррогат какой то.


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

Мой блог
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (8) « Первая ... 2 3 [4] 5 6 ... Последняя » Ответ в темуСоздание новой темыСоздание опроса