[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: PDIC - Property Dependency Injection Container
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18
chee
Цитата (twin @ 12.04.2016 - 20:36)
Но принцип тот же. Метаданные есть? Есть. Конструкторов нет? Нет. Второй объект создать нельзя, так же как у тебя. А зависимости подменить можно? Можно. В чем отличие

1. Структура метаданных усложнена;
2. Нету циклического заполнения зависимостей;
3. Хоть у меня в контейнере и невозможно создать разные экземпляры, но за пределами с помощью клонирование, второй экземпляр класс получить можно.

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

Разве? Один в один как у тебя делал:
$container = new Cheevauva\Container(array(
'App\Field\StringField' => array(
'someDependency' => 'App\SomeClass',
),

'App\FieldFactory' => array(
'container' => 'Cheevauva\Container',
),
));
Синтаксис не тот, а структура та же, помоему. У меня алиасы просто, но можно и без них сделать. Это не суть.
Цитата (chee @ 12.04.2016 - 17:33)
Нету циклического заполнения зависимостей;

Как нету? А это что:
        foreach($dependency as $property => $value)
{
$class::$$property = $value;
}
Или что ты ввиду имеешь?
Цитата (chee @ 12.04.2016 - 17:33)
Хоть у меня в контейнере и невозможно создать разные экземпляры, но за пределами с помощью клонирование, второй экземпляр класс получить можно.

Ну так это оверинжениринг и есть. Да и за пределами не считается. Я вот тоже могу за пределами всё что хочешь сэмулировать. Хоть клонирование, хоть черта лысого. Тут про сам контейнер речь.

Да и не важно, это просто карикатура. Чтобы было понятнео, что один объект без конструктора, это почти статический класс.

Мне про конструкторы больше интересно. Чего ты на них так обиделся?

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

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

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

user posted image
twin
Цитата (chee @ 12.04.2016 - 17:25)
Чё?

Я не злопамятный, но я злой, и память у меня хорошая. laugh.gif laugh.gif
Ты лично мне несколько раз говорил, что строишь свою CMS по канонам ООП. И постоянно тут её в пример людям приводишь. Теперь программиста своего по такому же принципу учишь. Вот я и говорю - не каноны это вовсе никакие. И никакие не новейшие это технологии. Просто твоё видение, не более того. И скажем так, если копнуть, то ничего хорошего в твоем подходе пока не видно.

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

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

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

user posted image
chee
Цитата (twin @ 12.04.2016 - 21:44)
Ну так это оверинжениринг и есть. Да и за пределами не считается. Я вот тоже могу за пределами всё что хочешь сэмулировать. Хоть клонирование, хоть черта лысого. Тут про сам контейнер речь.

Уже не актуально, сейчас get у меня отдает не shared объекты. Он готовит эти объекты как shared, но потом просто из хранилища их удаляет. Спасибо bestxp за хороший довод о клонирование объектов.

Также обновил у себя в системе контейнер. Кстати, я думал, что память просядет, а фиг там, потребление наоборот упало (незначительно). Хотя может всё потому, что я веду разработку под версией php7

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
chee
Цитата (twin @ 12.04.2016 - 21:44)
Синтаксис не тот, а структура та же, помоему. У меня алиасы просто, но можно и без них сделать. Это не суть.

Вообще-то на формат конфигов делается акцент, там не должно быть алиасов. Должен быть конкретный класс и описание свойств с конкретными зависимостями. То есть можно посмотреть на карту зависимостей и на название класса, и точно сказать в каком свойстве будет какая зависимость (тут я лукавлю, посредники же есть).

Цитата (twin @ 12.04.2016 - 21:44)
Или что ты ввиду имеешь?

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

Цитата (twin @ 12.04.2016 - 21:44)
Мне про конструкторы больше интересно. Чего ты на них так обиделся?

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

Цитата (twin @ 12.04.2016 - 21:44)
Чтобы было понятнео, что один объект без конструктора, это почти статический класс.

"почти" wink.gif

Цитата (twin @ 12.04.2016 - 21:50)
Ты лично мне несколько раз говорил, что строишь свою CMS по канонам ООП. И постоянно тут её в пример людям приводишь.

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

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

Ну вот, уже интереснее. smile.gif
Цитата (chee @ 12.04.2016 - 18:54)
Ну такой у меня опыт. Сколько код пишу, не вижу в них какой-то ну очень сильной надобности. Может это мои заблуждения и позже передумаю.
Ну поделись опытом. Может наоборот, я передумаю. Не могу представить себе, чем они могут навредить. Как не пыжился. sad.gif
Цитата (chee @ 12.04.2016 - 18:54)
Да, она строится на основе принципов ООП и с использование шаблонов проектирования.
Ну а кто против то. Только если в программировании делать основной акцент на шаблоны, можно не заметить вот таких недоразумений, как с клонированием.

Я не про шаблоны, а про "правильность" твоего видения ООП говорю. Не бывает правильного ООП. Бывает только индивидуальное, по собственным правилам. И оно нифига никаких преимуществ не дает перед мультипарадигмой. Потому что по сути разницы нет: что там бардак, что тут - кто во что горазд. Главное алгоритмы не проморгать А квалификация программиста определяется не "знанием" ООП, а способностью в этом бардаке разобраться.



А шаблоны... Я писал уже про них целую статью. smile.gif Одними шаблонами сыт не будешь. И вот такое ещё может получиться:
Цитата
Суть в том, что часто паттерны используются чересчур активно. Известна история о программисте, который, прочитав в первый раз книгу Банды Четырех, ухитрился использовать 16 паттернов в 32 строчках кода.
(с) Фаулер.
Свернутый текст
Чет всё больше и больше он мне нравится. smile.gif


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

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

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

user posted image
waldicom
Цитата (twin @ 13.04.2016 - 00:30)
Чет всё больше и больше он мне нравится. 

Кто нравится? Фаулер? Чё? ООП? Высоцкий?

_____________
Свои мозги еще никто не отменял.
Телепатов нету.
Invis1ble
Цитата (waldicom @ 13.04.2016 - 03:44)
Кто нравится? Фаулер? Чё? ООП? Высоцкий?
twin
Фаулер, как зависимость для ООП. biggrin.gif
И не Высоцкий это, а Жиглов. А Высоцкий, это же шаблон "Flyweight". Ничего вы в ООП не смыслите. biggrin.gif biggrin.gif

И контейнер этот тоже больше нравится в свете последних событий. Так глядишь и доведет до ума. biggrin.gif

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

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

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

user posted image
chee
Предыдущие изменения по работе с not shared объектами были через чур горячими и не продумаными с точки зрения концепции контейнера. Накатил новые изменения. Сейчас контейнер как и прежде возвражает shared объекты, но если при запросе объекта добавить в начале *, то вернется not shared объект.

$container->get('App\SomeObject'); // shared объект


$container->get('*App\SomeObject'); // not shared объект


Сделано это для того, что бы не менять текущую логику контейнера. В итоге доступна следущая плюшка

$container = new \Cheevauva\Container(array(
'Cheevauva\Test\Container\ExampleA2' => array(
'exampleA' => '*Cheevauva\Test\Container\ExampleA',
'exampleB' => '*Cheevauva\Test\Container\ExampleA',
)
);

/* @var $exampleA1 \Cheevauva\Test\Container\ExampleA */
$exampleA = $container->get('*Cheevauva\Test\Container\ExampleA2');
$exampleA->exampleA->test = new \stdClass;
empty($exampleA->exampleB->test); // true

Но с этим нужно быть осторожным, указываем у дочерней зависимости - родительскую, и всё - бесконечный цикл.

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

Вобщем то ты прав. Этот твой pet-проект хорошее учебное пособие. По нему хорошо учиться, как делать не надо. Я, в отличие от Ron'а, никогда не верю декларациям и всегда пытаюсь разобрать все, что возможно. И чего я раньше не обращал на него внимания...

Ты говоришь, что делаешь с использованием шаблонов проектирования. Хорошо. Но есть же и другие шаблоны - антипаттерны. И тут твоя система - хорошее пособие в их изучении. Вот только на одном контейнере сколько выясняется:

1. Ладно с публичными свойствами. Спорно. Но вот антипаттерн "объектная клоака" у тебя присутствовал, пока сей дебат не начался. Это касается клонирования в фабрике.

2. Полез эту фабрику смотреть. Там у тебя наследований куча, веревки целые. Вот модель допустим. Пользовательская. И иерархия:
Цитата
Factory->Alias->Model->userModel
Это уже можно приводить, как иллюстрцию к антипаттерну Yo-yo. Ну или как минимум "френкин-код". Потому и сложно твой код понять. А ты его в качестве обучающего материала... Нехорошо. smile.gif

3. Шаблон "фабрика", на сколько я понял, у тебя задействован для создания практически всех объектов системы. Раз они все в контейнере. А это уже выросли уши антипаттерна Gas Factory.

4. Использование метаданных для настройки зависимостей на грани фола с антиаттерном "мягкое кодирование". Я не берусь судить, но даже в этом топике я не одинок по этому поводу. Так что тоже показательно.

5. Ну и само то, что ты этот ущербный контейнер вытащил в паблик, да еще и с такой пафосной анотцией, это = антипатерн "золотой молоток"

Кроме того, на мой субъективный взгляд еще два: "ненужная сложность" и "дефакторинг" Это касается твоего последнего решения со звездочкой. Вместо нормального метода share(), который говорит сам за себя, ты вводишь новый синтаксис. Правда ты этот антипаттерн использовал наполовину. Доки то нет. biggrin.gif
Плюс паровозом "фактор невероятности". Это что касается бесконечного цикла.

И это только касаемо контейнера. Да там наверное просто кладезь знаний!

Не, ты не подумай, я не предъявляю. Я вообще очень предвзято отношусь к паттернам. Это известно. Но за учебное пособие реально спасибо. В теории не так просто понять антипаттерны. Сами паттерны куда проще.

Антипаттерны здесь.

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

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

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

user posted image
chee
twin, ты сейчас занимаешься демагогией, подменяем мою CMS на Symfony, Laravel, Yii и получаем всё тоже самое. Мягкое кодирование, Gas Factory,Yo-yo problem и другие.

Цитата (twin @ 13.04.2016 - 11:20)
Полез эту фабрику смотреть. Там у тебя наследований куча, веревки целые.

Это единственный правильно замечаный антипаттерн. Но его уже нет, отрефаторил 4 дня назад.
Текущая ветка разработки - form, ты смотрел для examplecms.

Работу с фабриками (а точнее с получение компонентов из бандла) я недавно пересмотрел в сторону упрощения, перекинув всю ответственность в сам бандл, объеденив в нём все эти фабрки

И может, уже оффтоп с обливанием говном мой системы, вынесем в отдельную тему?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
twin
Цитата (chee @ 13.04.2016 - 07:40)
twin, ты сейчас занимаешься демагогией, подменяем мою CMS на Symfony, Laravel, Yii и получаем всё тоже самое.
Почему демагогией... Ничего не тоже самое. Нет там таких кривых контейнеров.
Цитата (chee @ 13.04.2016 - 07:40)
И может, уже оффтоп с обливанием говном мой системы, вынесем в отдельную тему?

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

Да и не обливал я ничего говном. Как ты не поймешь, я на твоей стороне больше чем ты сам. Вот себя же процитирую:
Цитата
Это хорошие, добротные, проверенные тысячами программистов, шаблоны. Но они все носят рекомендательный характер. И совершенно не обязательны к исполнению. Иногда сознательное отступление от них вовсе не являются bad-practices.

Нравится так - делай. Кто посмеет запретить. Просто теперь я знаю, где показать иллюстрацию. smile.gif

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

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

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

user posted image
chee
Короче, я тебя услышал и мне посрать, что ты думаешь.

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

Хорошо. Давай первый разберем. Название красивое))) Он кстати до сих пор у тебя до сих пор присутствует по умолчанию.

По сути твой контейнер, это паттерн "пул объектов". В PHP его сложно применить, потому что тут принцип "отработал - умри". Однако ты умудрился не только применить, но и применить неправильно. Не важно, что объект инициализируется в момент обращения к нему. Важно, что все они собраны в хранилище объектов. Причем по принципу синглтона.

Вот для избежания этого антипаттерна Пимпл и использует callable и constructor dependency. А так же not shared по умолчанию. Там применить анитипаттерн можно только сознательно, а не по умолчанию.

Раз синглтон, значит ты сам нарушил закон пула
Цитата
После того, как объект возвращён, он должен вернуться в состояние, пригодное для дальнейшего использования. Если объекты после возвращения в пул оказываются в неправильном или неопределённом состоянии, такая конструкция называется объектной клоакой

Вот иллюстрация клоаки в твоем коде. Это же очевидно.
    $container = new Container(array(
'ExampleA' => array(
'exampleB' => 'ExampleB'
)
));



$objA = $container->get('ExampleA');
var_dump($objA->getStatus()); // true

// Здесь в процессе меняется состояние объекта

$objA->exampleB->status = false;

// Другой край географии. Я понятия не имею, где что творилось с объектом.
// Хочу из контейнера (пула) чистый объект, без состояния.

$objA = $container->get('ExampleA');
var_dump($objA->getStatus()); // И что? КЛОАКА!


И ты всех, кто привык работать по паттернам, считай подставил. Потому что твой контейнер один прет против общих правил. А он в паблике, так, на секундочку.

Цитата
Сделано это для того, что бы не менять текущую логику контейнера.

Кстати, еще один антипаттерн. Самый знаменитый: костыль. :D Ты решаешь проблему звездочкой, на месте, без редизайна.

Цитата (chee @ 13.04.2016 - 08:38)
Короче, я тебя услышал и мне посрать, что ты думаешь.

Да кому ты нужен. Я думаешь для тебя распинаюсь? Я для себя в первую очередь хочу уяснить. И люди послушают. Единственно только - мне жаль твоих подопечных. Они будут думать, что ты действительно гуру в ООП.

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

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

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

user posted image
Быстрый ответ:

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