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

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

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

Об этом недостатке я кстати не упоминал раньше, а это тоже концепция.

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

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

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

user posted image
Гость_chee
Повторюсь. Я не собираюсь в этой теме обсуждать твой контейнер.
twin
Да причем тут мой контейнер то вообще. Я про концепцию говорю. Реализовать можно как угодно, я свой для примера привел. И не прошу обсуждать его реализацию. Но там концепция правильная, и мне проще объяснить было.
Но ты не слышишь ничего вообще.

Цитата
- Мужик! У тебя в ухе банан!
- Говорите громче, у меня в ухе банан!


Ну и ладно, живи как знаешь. Чего это я, действительно, проблема то у тебя.
Хватит бисер метать.

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

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

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

user posted image
chee
twin, конечно я буду жить как хочу laugh.gif

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

НО! Так в этом его смысл и есть, он позволяет решить проблему IoC своим путем и решает ее. Да он не делает это так же многофункционально как PHP DI, Pimple или твой. В этом его фишка, он решает задачу очень просто, он утилитарен, навешивая на него дополнительные обвязки, это превращать его в очередной DIC похожий на другие и смысла в нем вообще нет. Я вот вообще не понимаю зачем ты свой контейнер написал, тот же Pimple или PHP DI умеют все тоже самое и делают внутри, я более чем уверен - также как у тебя.

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

Цитата (chee @ 10.01.2021 - 19:37)
Я вот вообще не понимаю зачем ты свой контейнер написал, тот же Pimple или PHP DI умеют все тоже самое и делают внутри, я более чем уверен - также как у теб

Да потому же, почему и ты. Меня не все в них устраивало. Что именно, не буду говорить, это не важно в текущем контексте. Но я досконально разбирался в вопросе, прежде чем приступить к реализации. И естественно смотрел, как устроены эти разработки. Почему так, и чем грозит иначе. И я взял из них лучшее, а именно концепцию построения.

Если бы мне тогда кто-то подсказывал, я был бы счастлив.

Ты же взял самое худшее, а сейчас тебе обидно и ты ведешь себя как ребенок:

- Да, крыша у меня протекает, но не так уж сильно, я тазик поставлю.

А последний перл - вообще шибздец:

- Покажи мне реализацию!
- Смотри.
- Не буду смотреть! Зачем ты сюда припер свою игрушку, здесь моя песочница!

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

Ладно, смысла на тебя тратить время больше нет. Я получил от холивара пользу - сделал карту для своей свистоперделки. Мне достаточно. Ты как хочешь. Адью.

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

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

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

user posted image
chee
потеря потерь, жаль что уходишь (нет)

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

Мне вот интересно, ну не хочешь ты менять основной принцип. Ладно. Хочешь фабрики юзать - твое дело. Хочешь звездочку - ни кто не может запретить. Но ведь проблема клоаки решается всего одной строчкой. Я тебе пару страниц назад показывал. Почему это то не решить?

Еще раз покажу:
                $object->{$property} = $this->get('*'. ltrim($class, '*'));


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

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

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

user posted image
chee
twin, Ты вернулся? Ура (нет)

Цитата (twin @ 11.01.2021 - 21:02)
Еще раз покажу:

Ты просто не понимаешь почему все именно так.

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

Пример:
1. PSR-7 Request/Response это экземпляры классов текущего запроса пользователя
2. Фабрика это экземпляр инфраструктурного класса
3. Модуль это экземпляры классов текущего запроса пользователя, который ссылается на экземпляры инфраструктурного класса
4. Адаптар для обращения к метаданных это экземпляр инфраструктурного класса
5. Классы мидлваров это экземпляры классов текущего запроса пользователя, который ссылается на экземпляры инфраструктурного класса

И т.д.

Сложная ООП система имеет разные требования к разных объектам, к их количеству и принципу создания, а также внедрению их в другие объекты. Ты рассуждаешь о том как использовать контейнер на 3 классах, у меня же система на один запрос создает порядка 60-80 экземпляров как инфраструктурных классов так и классов текущего пользователя. На 2-3 классах ты хоть сколько можешь упражняться в словесности, но реально работают твои концепции или нет, покажет только практика.

У тебя есть ABC-Framework, который по сути работает на статическом сервис локаторе, ну так внедри в него свой контейнер и отвяжи фреймворк от сервис локатора, тогда у тебя наконец-то прояснится в башке понимание того о чем я говорю, ты увидишь что объекты разные и жизненный цикл у них разный, и востребованность у каждого объекта разная. То о чем ты говоришь и пытаешься мне впарить как единственно правильный вариант, нужно крайне редко. Нужно порождать новые объекты, но обычно зависимости для порожденных объектов уже должны быть настроены и лежать в контейнере. Ты судишь о моем контейнере на уровне первого использования, я же сужу на уровне построенной сложной системы, у нас разные потребности и требования к DIC.

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

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

Ты построил свой контейнер, зная что там есть дыра, и выложил его в паблик. Странный ты. А самая большая странность, что дыра заделывается одной строчкой. И ничего не сломается. Больше того скажу - она усиливает твою концепцию.

Ответь на вопрос. Почему это ты не хочешь исправить? Ты может меня так и не понял?

Цитата (chee @ 11.01.2021 - 19:55)
1. PSR-7 Request/Response это экземпляры классов текущего запроса пользователя

Крайне неудачный пример. Хуже и придумать нельзя. Знаешь, почему методы там называются withHeader() а не addHeader()? Ну и остальные по аналогии? Многих мучал такой вопрос. Да потому что метод всегда возвращает новый объект. Каждый раз. Даже когда в этом нет необходимости.

По твоей концепции настроенные объекты должны храниться в контейнере. Так кто же против? Дыра в том, что хранятся не только настроенные объекты, но и объекты настройки. И они, в отличие от PSR7, который ты привел в пример, всегда одни и те же. Не одинаковые, а одни.

Тебя не смущает большое количество объектов. Так а почему ты тут экономишь, где явная дырка?

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

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

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

user posted image
chee
Цитата (twin @ 12.01.2021 - 00:28)
Каждый раз. Даже когда в этом нет необходимости.

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

Цитата (twin @ 12.01.2021 - 00:28)
Так а почему ты тут экономишь, где явная дырка?

Я тебе выше писал, ты видимо читаешь через строки. Я осознаю что у меня течет абстракция в пределах обращения к контейнеру, когда хочется получить экземпляр класса который не должен храниться в контейнере. И я тебе пояснил, почему я в ближайшее время не будут править, так как формально контейнер соответствует PSR-11, а также эта течь локализована фабричным слоем. Так что естественно я экономлю, я уже не 20летний парнишка, энтузиазма не вагон и маленькая тележка, его надо экономить.

Я конечно думаю как это переделать, вот обсуждая с тобой это, пришла странная идея, попробую, может что получится.

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

Я бы не говорил так, если бы сам не реализовал HTTP по этому стандарту. Все методы with... обязаны возвращать новый объект.

Потому и всегда используется перезапись:

$responce = $responce->withHeader(....);
// Вот так не сработает
$responce->withHeader(....);
Потому что заголовок добавится в новый объект, а он никуда не присвоен.

В новый! А ты хранишь старые объекты зависимостей. Не сервисов, а зависимостей. И используешь их для всех сервисов.

Тебе может гордость не позволяет принять то, что я советую? Ну это же очевидно просто. Поставь принудительно звездочку на зависимость и радуйся. Остальное побоку, твое дело. :)

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

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

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

user posted image
chee
Идея оказалась рабочей, так как она явно прослеживалась, я просто ее раньше не замечал ohmy.gif

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

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

Опыт, текущая практика. Твои советы приводят к избыточности в коде, я пытался сменить поведение со звездочками на противоположное, но это приводит к увеличению кодовой базы в контейнере, а карта зависимостей требует проставления везде звёздочек, там где раньше было 3 строки со звездочкой, будет все в звёздочках и 3 строки без звездочки. Избыточность синтаксиса даже говорит, что решение не стыкуется с концепцией. Гордость тут не причем.

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

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

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

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

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

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