Казалось бы, простой шаблон, но из видео узнал... увидел наглядный пример использования позднего статического связывания и оператор объединения с null. Даже не знал, что такой есть. И идея с трейтом интересная, можно просто копипастить из проекта в проект, не надо писать ручками. Хотя бы с такой точки зрения - полезная штука. А ларавел синглтон странный, если объект его класса можно и через new создать. Если синглтон может сохранять состояние, то это Реестр)
Очень полезные видео, примеры! Хотелось бы почупать, попробовать, посмотреть более детальнее. Есть ли какой то репозиторий или ссылка откуда можно скачать?
А свойство $singletons, созданное в AppProvider - это какое-то предопределенное название? Сначала просто назвал $singleton и долго не мог понять почему мне Ларавел ошибку выкидывает: Illuminate\Contracts\Container\BindingResolutionException thrown with message "Target [App\DesignPatterns\Creational\Singleton\Interfaces\AnotherConnection] is not instantiable." Спасибо за видео!
Смотри еще что заметил, можешь запутать новичков: 149 строка - запрашиваем создание объекта реализующего интерфейс AnotherConnetion 150 строка - используем метод которого нет в интерфейсе. Понятно что это пример ради примера, но я когда пытался въехать в такие вещи, - офигевал когда были какие то расхождения) Ну вот, видео досмотрел, я как то даже и не думал за магические методы, годное видео, спасибо за труд)
Дмитрий давно хотел у вас спросить а как вы располагаете открытые вкладки в Шторме справа в столбик? Искал как сделать не нашел))) Может конечно я плохо искал)))) Но все же хотел бы у Вас узнать)))
Дмитрий, здравствуйте, смотрю ваш канал уже полгода :) Можете сделать урок о том, как сделать на своем сайта на laravel внутреннюю валютную систему? Если кратко - пользователи могут покупать условные монетки на сайте, с помощью которых они могут играть друг с другом в шахматы. Эти монетки можно выводить на webmoney, банковскую карту. Нет ни одного урока в интернете как реализовать такую систему безопасно и надежно. Раскроете тему? :)
@@lilwayne5504 в принципе если с логикой у вас все хорошо, то вам потребуется всего 2 пакета. 1 - биллинг любой удобный вам (стоковый для Лары есть в документации или же Omnipay или Payum) сравнение последних можно найти на тостере. 2 - пакет для работы с внутренней валютой (таблица с id пользователя и кол-вом монет)(минимальный набор) так же (таблица транзакций)(но тут надо тестить нужна ли она) и сам класс реализующий механику работы (передачу монет между пользователями и защиту от передачи большего значения суммы монет чем есть. Так же гетер чтобы получить текущий баланс и думаю все) для вывода средств с сайта придется что-то колхозить, а так в общем то что вы хотите реализовать я вижу как-то так. Может быть Дмитрий как белое опытный программист увидит в этом описании то что я не продумл. Но думаю общая концепция должна выглядеть как-то так
Есть во вконтакте такие шахматы. Не знаю кто в это вообще играет, когда есть бесплатные аналоги) Я бы сказал, что это изначально мёртвая идея, но видимо этим кто-то пользуется.
Замечательные видео. Смотрю с удовольствием и черпаю знания. Небольшая неточность На 11:43 вы говорите "мы запрещаем клонирование". Но это не так. Метод __clone() дополняет обычное клонирование объекта, а не переписывает его. Тут маленький тест чтобы проверить prnt.sc/zgcyrc
Я немножко покопался в синглтоне, вроде бы всё очень банально, но всё равно остаётся дыра из-за которой можно создать новый объект. Можно создать объект используя статический метод класса. Даже если закрыт конструктор, хитрый новый разработчик может прийти, создать любой статический метод в классе и вернуть в нём "new self()". И вот ничего с этим не могу решить. Насколько я понимаю создание объекта внутри класса игнорирует приватность метода конструктора. В принципе это можно обойти, если вместо трейта сделать абстрактный класс и наследовать его, но тут мы должны быть уверены, что тогда класс, наследующий этот абстрактный класс синглтона не имеет публичного конструктора. Короче в php неоднозначно это всё и защиту от дураков не сделаешь или может я дурак и не нашёл, как это сделать. Может и не стоит зацикливаться на дураках, например классы синглтоны ларавелы тоже не защищены и в их случае экземпляр нужно получать только через DI или IoC контейнер, но ничего не мешает сделать new Illuminate\Http\Request А вообще спасибо вам за порождение интереса к паттернам проектирования
Приватный метод не доступен извне, но доступен самому классу. Так что игнорировать ничего не не надо. Если пугает то, что могут дописать новые методы, класс можно сделать final. А если редактировать сам класс, так можно просто убрать приватность с конструтора, зачем писать ещё новые методы.
Честно говоря в реалиях РНР даже не знаю, где этот шаблон пригодится. Это же не локальное ПО, где классы существуют пока работает ПО. Хотя если писать что-то прям совсем тяжелое, где перегружаться вся страница не будет, то да, но я до такого уровня еще не дорос.
Я правильно понимаю, что объект уникален только в цикле работы приложения для одного конкретного пользователя? То есть сколько пользователей, столько и объектов таких?
@@Алексей-ч2ф9л что вы подразумеваете под пользователем? Объект уникален во время выполнения php скрипта. В те секунды или милисекунды, что сервер возвращает ответ клиенту ( чаще всего браузеру ).
По поводу сохранения состояния: В классе работы с БД мы ведь вынуждены хранить «подклбчение» к БД, верно? А методы того же Логгера сделать статическими и забыть о создании синглтона. Что я не понял правильно?
По заказу из донатов - следующий шаблон - Стратегия
Спасибо! Очень ждем!
А есть донаты с пожеланиями освещения unit тестов? Я бы внес свой вклад в донат для этой темы, если есть шанс что она войдет в курсе по ларе
Может пора реализовать донат-голосовалку полноценную?
Спасибо за вашу работу
Спасибо за труды)
Спасибо. Было полезно
всё чётко, могёте 2:08
Супер
Спасибо )
Казалось бы, простой шаблон, но из видео узнал... увидел наглядный пример использования позднего статического связывания и оператор объединения с null. Даже не знал, что такой есть. И идея с трейтом интересная, можно просто копипастить из проекта в проект, не надо писать ручками. Хотя бы с такой точки зрения - полезная штука.
А ларавел синглтон странный, если объект его класса можно и через new создать.
Если синглтон может сохранять состояние, то это Реестр)
private в __wakeup больше не доступен.
Продолжай!
круть
Спасибо, было вкусно
1:03 😂😂 Да, я соглашусь.
Херак Херак и в продакшен))
О класс, я тоже когда начинал знакомиться с ларавелом, сделал трейт синглтона, не такой крутой конечно)
Очень полезные видео, примеры! Хотелось бы почупать, попробовать, посмотреть более детальнее. Есть ли какой то репозиторий или ссылка откуда можно скачать?
На текущий момент времени только такой способ получить исходники - ruclips.net/video/Hz7U5XiPkkg/видео.html
А свойство $singletons, созданное в AppProvider - это какое-то предопределенное название? Сначала просто назвал $singleton и долго не мог понять почему мне Ларавел ошибку выкидывает:
Illuminate\Contracts\Container\BindingResolutionException thrown with message "Target [App\DesignPatterns\Creational\Singleton\Interfaces\AnotherConnection] is not instantiable."
Спасибо за видео!
да. и об этом говорится в видео
Смотри еще что заметил, можешь запутать новичков:
149 строка - запрашиваем создание объекта реализующего интерфейс AnotherConnetion
150 строка - используем метод которого нет в интерфейсе.
Понятно что это пример ради примера, но я когда пытался въехать в такие вещи, - офигевал когда были какие то расхождения)
Ну вот, видео досмотрел, я как то даже и не думал за магические методы, годное видео, спасибо за труд)
Я же сказал об этом - что для правильности метод надо объявить в интерфейсе...
Дмитрий давно хотел у вас спросить а как вы располагаете открытые вкладки в Шторме справа в столбик? Искал как сделать не нашел))) Может конечно я плохо искал)))) Но все же хотел бы у Вас узнать)))
Дмитрий, здравствуйте, смотрю ваш канал уже полгода :)
Можете сделать урок о том, как сделать на своем сайта на laravel внутреннюю валютную систему?
Если кратко - пользователи могут покупать условные монетки на сайте, с помощью которых они могут играть друг с другом в шахматы. Эти монетки можно выводить на webmoney, банковскую карту. Нет ни одного урока в интернете как реализовать такую систему безопасно и надежно.
Раскроете тему? :)
Это тянет на хороший курс )))))
Хороший - всмысле - не маленький.
@@DmitryAfanasyev , буду рад, если выпустите такой курс :) приобрету самый первый! :)
@@lilwayne5504 в принципе если с логикой у вас все хорошо, то вам потребуется всего 2 пакета.
1 - биллинг любой удобный вам (стоковый для Лары есть в документации или же Omnipay или Payum) сравнение последних можно найти на тостере.
2 - пакет для работы с внутренней валютой (таблица с id пользователя и кол-вом монет)(минимальный набор) так же (таблица транзакций)(но тут надо тестить нужна ли она) и сам класс реализующий механику работы (передачу монет между пользователями и защиту от передачи большего значения суммы монет чем есть. Так же гетер чтобы получить текущий баланс и думаю все) для вывода средств с сайта придется что-то колхозить, а так в общем то что вы хотите реализовать я вижу как-то так. Может быть Дмитрий как белое опытный программист увидит в этом описании то что я не продумл. Но думаю общая концепция должна выглядеть как-то так
Есть во вконтакте такие шахматы. Не знаю кто в это вообще играет, когда есть бесплатные аналоги) Я бы сказал, что это изначально мёртвая идея, но видимо этим кто-то пользуется.
Замечательные видео. Смотрю с удовольствием и черпаю знания.
Небольшая неточность
На 11:43 вы говорите "мы запрещаем клонирование".
Но это не так.
Метод __clone() дополняет обычное клонирование объекта, а не переписывает его.
Тут маленький тест чтобы проверить prnt.sc/zgcyrc
Ух ты, добавлено 18 секунд назад)
Да, синглтон знают все)
Я немножко покопался в синглтоне, вроде бы всё очень банально, но всё равно остаётся дыра из-за которой можно создать новый объект. Можно создать объект используя статический метод класса. Даже если закрыт конструктор, хитрый новый разработчик может прийти, создать любой статический метод в классе и вернуть в нём "new self()". И вот ничего с этим не могу решить. Насколько я понимаю создание объекта внутри класса игнорирует приватность метода конструктора. В принципе это можно обойти, если вместо трейта сделать абстрактный класс и наследовать его, но тут мы должны быть уверены, что тогда класс, наследующий этот абстрактный класс синглтона не имеет публичного конструктора. Короче в php неоднозначно это всё и защиту от дураков не сделаешь или может я дурак и не нашёл, как это сделать.
Может и не стоит зацикливаться на дураках, например классы синглтоны ларавелы тоже не защищены и в их случае экземпляр нужно получать только через DI или IoC контейнер, но ничего не мешает сделать new Illuminate\Http\Request
А вообще спасибо вам за порождение интереса к паттернам проектирования
Приватный метод не доступен извне, но доступен самому классу. Так что игнорировать ничего не не надо. Если пугает то, что могут дописать новые методы, класс можно сделать final. А если редактировать сам класс, так можно просто убрать приватность с конструтора, зачем писать ещё новые методы.
Забыл в SimpleSingleton классе закрыть конструктор!
Честно говоря в реалиях РНР даже не знаю, где этот шаблон пригодится. Это же не локальное ПО, где классы существуют пока работает ПО. Хотя если писать что-то прям совсем тяжелое, где перегружаться вся страница не будет, то да, но я до такого уровня еще не дорос.
В смысле не знаешь где пригодится? Используется и очень часто.
Будь он не востребован - в ларавел бы точно не включили возможность порождать их на автопилоте.
Я правильно понимаю, что объект уникален только в цикле работы приложения для одного конкретного пользователя? То есть сколько пользователей, столько и объектов таких?
@@Алексей-ч2ф9л Объект один, сссылок на него много только может быть, так как переменная в ПХП ссылки на объекты копирует.
@@Алексей-ч2ф9л что вы подразумеваете под пользователем? Объект уникален во время выполнения php скрипта. В те секунды или милисекунды, что сервер возвращает ответ клиенту ( чаще всего браузеру ).
По поводу сохранения состояния:
В классе работы с БД мы ведь вынуждены хранить «подклбчение» к БД, верно?
А методы того же Логгера сделать статическими и забыть о создании синглтона.
Что я не понял правильно?
Ух ты, добавлено 18 секунд назад)
Да, синглтон знают все)