PHP-DI - сервис контейнер

  Рет қаралды 12,254

WebForMySelf

WebForMySelf

Күн бұрын

Исходники к уроку тут: webformyself.c...
В объектно-ориентированном программировании сложно представить скрипт, который работает с использованием всего лишь одного класса, так как, по сути, в этом теряется весь смысл ООП.
Классов может быть сколько угодно, а значит и создаваемых на их основе объектов еще больше. И они должны определенным образом взаимодействовать между собой. Конечно, все зависит от поставленных задач и архитектуры приложения, но так или иначе наиболее часто встречаемый случай - это использование объекта одного класса в методах другого. Как раз об этом мы поговорим в текущем уроке. На практике мы с Вами рассмотрим построение сервис контейнера для реализации механизма внедрения зависимостей.
При этом в рамках одного урока, конечно же, мы с Вами не успеем написать все с абсолютного нуля, поэтому на примере библиотеки PHP DI мы посмотрим, как формируются подобные вещи и возможно она заинтересует Вас для использования в своих проектах.

Пікірлер: 27
@СергейПрозоров-ч5к
@СергейПрозоров-ч5к 6 күн бұрын
Долгое время не понимал как устроен laravel. Благодаря этому уроку понимания стало на много больше
@estupidoParapente
@estupidoParapente 3 жыл бұрын
Хоспадя, наконец-то понятное и достаточно подробное объяснение предмета! + качественные голос и видео + исходники! Благодарю, парни! Если бы у вас был курс по свежему Slim4 или Twig, я бы купил.
@romanbush5164
@romanbush5164 2 жыл бұрын
наконец то понятно , что такое DI , теперь в ларке можно будет использовать это. Спасибо.
@FranckMercado
@FranckMercado 4 жыл бұрын
I couldn't understand the language but the code was pretty clear and I loved the video, great job!
@artem_ib
@artem_ib 2 жыл бұрын
Только можно сказать учусь, пишу своё подобие библиотеки в целях обучения и вот да, действительно столкнулся с такой проблемой внедрения зависимостей, когда один класс, зависит от другого, спасибо за решение. Теперь понятно что это за контейнеры всякие в laravel обсуждают
@artem_ib
@artem_ib 2 жыл бұрын
И да, понятно что можно и без этого обойтись, если сам себе режиссёр, но думаю нужно стремится писать, как обще принято
@yashkevich8164
@yashkevich8164 4 жыл бұрын
Неплохое объяснение. не хватает поправок на новичка)) Зачем это все в проекте?
@mikurrey416
@mikurrey416 4 жыл бұрын
С самого 2012-го, когда DI в PHP вошел в моду, сталкиваюсь с одним и тем же явлением: необходимость его применения в проекте сигнализирует о перегруженности в архитектуре. Если требуется автоматизировать цепочки передачи одного объекта в другой, значит, пора что-то рефакторить. Ну а когда DI применяют просто потому что "это же круто!", тогда вообще ад. Человекопонятность кода снижается в разы Самое красивое применение DI встретил за всё это время в Yii2 - там используется как раз "ручное" создание контейнера с помощью конфигурации, где задаются имена классов и аргументы конструктора для каждого сервиса.
@zazaorg3957
@zazaorg3957 3 жыл бұрын
DI нужен не для красивого применения. Он нужен как некоторая прослойка между твоим приложением и огромным количеством библиотек/фрейморвков, которые вы используете
@Maksimasz
@Maksimasz 3 жыл бұрын
Все хорошо, вот только не понял зачем везде писать эти "спагетти"(\App\Classes ........) если можно просто вверху страницы написать use \App\Classes ........ . Тогда и код более менее читабельным становится, по крайней мере для новичков. И Второе хоть убейте не понял зачем делать такую сложную архитектуру файлов и папок ??? По моему перебор. Не только код должен быть читаемым, но и архитектура проекта должна быть читаема, если можно так сказать . Тогда и "спагетти" станут короче. А вообще, что бы понять нормально DI , надо самому пару проектов написать своим кодом, без библиотек, потому что можно научиться это делать с помощью библиотеки, но понять как это работает нет.
@EdwVee
@EdwVee 3 жыл бұрын
А есть оболочка, чтобы userManager ил Mailer тот же не создавался каждый раз новый?
@artem_ib
@artem_ib 2 жыл бұрын
24:20 Ручное формирование контейнера
@soversus5374
@soversus5374 4 жыл бұрын
Интересный инструмент. Однако считаю, что если его пришлось использовать, что то пошло не так на этапе проектирования.
@konstantinp440
@konstantinp440 4 жыл бұрын
Неплохо! Но не понятно - зачем это нужно. Делая сильно зависимым инициализируя объект в другом классе - много труда и этот способ с контейнерами пока настроишь то сё - опять много труда. пример как раз показал переусложнение проекта контейнером где вместо new Foo(); нужно писать $foo->get('Foo')
@БогданЯремчук-я5б
@БогданЯремчук-я5б 4 жыл бұрын
А теперь представь что этот Foo(Mail $m) используется в 1000 классов и появилась необходимость добавить в него логгер Foo(Mail $m, Logger $l). Уверяю что этот день ты проглянешь, а ведь еще надо будет проверить что все места в которые ты внес изменения работаю, а тесты пишутся не всегда и не на все. Так же помогает иметь доступ к глобальным объектам таким как работа с базой и выпилить такую штуку как синглтон.
@XxX-sq8yv
@XxX-sq8yv 4 жыл бұрын
Здравствуйте. Скажите, планируются ли новые курсы по Laravel или Symfony?
@olegkostyuk3537
@olegkostyuk3537 4 жыл бұрын
Когда же по ларавел курс??
@code184
@code184 4 жыл бұрын
Чтоб я делал без этого видео :)
@mister-ace
@mister-ace 3 жыл бұрын
А если у меня абстрактный класс?
@Прощепростого-д6р
@Прощепростого-д6р 2 жыл бұрын
какой нах абстрактный класс??? Объекты от абстрактного класса просто так создать нельзя! А тут речь о объектах!
@mister-ace
@mister-ace 2 жыл бұрын
@@Прощепростого-д6р , ты бы мне еще ответил через 5 лет. Ну, во-первых, объекты от абстрактного класса не то что "просто так создать нельзя", а совсем нельзя, ибо это абстракция. Во-вторых, в контейнерах можно делать привязку реализации к интерфейсам, к тому же абстрактному классу, например(поэтому я и скорее всего спросил год назад). Ну и в целом это видео я бы не рекомендовал смотреть новичкам, лучше почитать нормальную литературу по этому поводу или в документациях по фреймворку, в том же Symfony/Laravel.
@Прощепростого-д6р
@Прощепростого-д6р 2 жыл бұрын
@@mister-ace ну, во-первых, объекты от абстрактного класса создать можно, с помощью наследования, это просто так как от конкретного класса из абстрактного - нельзя! Поэтому, во-вторых, если параметром выступает абстракция, то аргументом может быть объект, супертипом которого является данная абстракция.
@grommaks
@grommaks 4 жыл бұрын
А почему не symfony/dependency-injection? Как часто Вы слышаши что используют php-di в проектах?
@ВикторГавриленко-б3м
@ВикторГавриленко-б3м 4 жыл бұрын
Здравствуйте! Можно записать урок и по контейнеру symfony/dependency-injection, поросто мне показлось, что php-di более простое для новичков
@konstantinp440
@konstantinp440 4 жыл бұрын
по моему мнению, все что требуется эта либа даёт.
@grommaks
@grommaks 4 жыл бұрын
@@konstantinp440 Ну вроде бы и да Но, в Laravel не используется В симфони не используется Не знаю как дела обстоят с YII Симфони контейнер достаточно прост в понимании и изучении, и достаточно мощный чтобы в ходе курса дать по нему дополнительные возможности по конфигурации через xml или yaml Вот я и спрашивал, есть ли те, кто испльзовал эот контейнер где либо кроме уроков.
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН
Cat mode and a glass of water #family #humor #fun
00:22
Kotiki_Z
Рет қаралды 42 МЛН
Сортировка массивов в PHP
16:45
WebForMySelf
Рет қаралды 11 М.
JIT в PHP 8: Просто о сложном
19:26
Andrey Lozunov - Fullstack Web Developer
Рет қаралды 15 М.
黑天使被操控了#short #angel #clown
00:40
Super Beauty team
Рет қаралды 61 МЛН