Выделение частного класса данных
Обычно классы всегда изначально выглядят чёткими и понятными. Они выполняют свою работу и не лезут в обязанности других классов. Однако при разработке программы добавляется новая логика. В результате некоторые классы ошибочно получают массу дополнительных обязанностей. На помощь приходит частный метод рефакторинга, известный под названием Выделение класса (Extract Class). Он позволяет соблюсти «Принцип единственной ответственности», тем самым делая классы более надёжными и устойчивыми к изменениям.
Чтобы применить этот шаблон проектирования к нужному классу, необходимо:
1. Создать новый класс, который будет иметь одну ответственность, используя методы рефакторинга: выделения поля и выделения метода.
2. Создайте связь между старым и новым классом.
Следует вносить изменения понемногу и тестировать результат после каждого перемещения, это избавит вас от необходимости исправлять большое число ошибок в самом конце. По окончанию, пересмотрев ещё раз новые классы, вернитесь к старому классу, возможно, у него изменилась ответственность, и теперь его имеет смысл назвать по-другому.
https://ru.wikipedia.org/wiki/Выделение_частного_класса_данных
Обычно классы всегда изначально выглядят чёткими и понятными. Они выполняют свою работу и не лезут в обязанности других классов. Однако при разработке программы добавляется новая логика. В результате некоторые классы ошибочно получают массу дополнительных обязанностей. На помощь приходит частный метод рефакторинга, известный под названием Выделение класса (Extract Class). Он позволяет соблюсти «Принцип единственной ответственности», тем самым делая классы более надёжными и устойчивыми к изменениям.
Чтобы применить этот шаблон проектирования к нужному классу, необходимо:
1. Создать новый класс, который будет иметь одну ответственность, используя методы рефакторинга: выделения поля и выделения метода.
2. Создайте связь между старым и новым классом.
Следует вносить изменения понемногу и тестировать результат после каждого перемещения, это избавит вас от необходимости исправлять большое число ошибок в самом конце. По окончанию, пересмотрев ещё раз новые классы, вернитесь к старому классу, возможно, у него изменилась ответственность, и теперь его имеет смысл назвать по-другому.
https://ru.wikipedia.org/wiki/Выделение_частного_класса_данных
👍3
OneCode
Конкурс! Приз 500 рублей на карту 💸 Победителем станет тот, кто напишет в комментариях что можно оптимизировать в примере из этого поста. Написать нужно то, о чем я думаю 😃 и приложить полноценный пример кода. Выиграет первый правильный ответ, НО сообщение…
Итоги конкурса
Победителем стал Тарас, который предложил перенести API-токен на бекенд, чтобы пользователь не мог отправить 100500 запросов от нашего имени и потратить весь лимит.
На самом деле я думал о том, чтобы убрать лишний запрос к бекенду, потому что (кто знает специфику работы Livewire) когда мы вызываем
Однако Тарас предложил другую, но хорошую идею перенести API-токен на бекенд.
Таким образом мы можем совместить обе задачи:
1. Не отправлять лишних запросов к нам на сервер.
2. Скрыть от пользователя API-токен.
Это можно сделать путём получения страны пользователя и указания нужного значения в селекте сразу при первой отрисовке страницы на бекенде, чтобы в браузер уже прилетала выбранная страна.
Другой вариант (на скрине) - добавить
#contest
Победителем стал Тарас, который предложил перенести API-токен на бекенд, чтобы пользователь не мог отправить 100500 запросов от нашего имени и потратить весь лимит.
На самом деле я думал о том, чтобы убрать лишний запрос к бекенду, потому что (кто знает специфику работы Livewire) когда мы вызываем
@this.set('foo', 'bar'), то отправляется запрос на бекенд.Однако Тарас предложил другую, но хорошую идею перенести API-токен на бекенд.
Таким образом мы можем совместить обе задачи:
1. Не отправлять лишних запросов к нам на сервер.
2. Скрыть от пользователя API-токен.
Это можно сделать путём получения страны пользователя и указания нужного значения в селекте сразу при первой отрисовке страницы на бекенде, чтобы в браузер уже прилетала выбранная страна.
Другой вариант (на скрине) - добавить
Middleware, в котором мы получаем страну пользователя по его IP и сразу сохраняем её в базе данных.
#contest
👍1
Интересно как много разработчиков у нас используют Cloudflare в своих или рабочих проектах?
Anonymous Poll
21%
Использую
38%
Не использую
41%
Не знаю что это
Сравнение объектов в PHP
Оператор сравнения
- Объекты являются экземплярами одного и того же класса.
- Все свойства объектов имею одинаковые значения.
Оператор идентичности
- Объекты являются экземплярами одного и того же класса.
- Объекты являются одним и тем же экземпляром.
- Все свойства объектов имею одинаковые значения.
https://www.php.net/manual/ru/language.oop5.object-comparison.php
#php
Оператор сравнения
==проверяет, что:
- Объекты являются экземплярами одного и того же класса.
- Все свойства объектов имею одинаковые значения.
Оператор идентичности
===проверяет, что:
- Объекты являются экземплярами одного и того же класса.
- Объекты являются одним и тем же экземпляром.
- Все свойства объектов имею одинаковые значения.
https://www.php.net/manual/ru/language.oop5.object-comparison.php
#php
👍7
Шаблон проектирования Proxy (заместитель)
Сегодня успешно использовал этот шаблон (кеширующий прокси), чтобы завернуть некоторые ответы HTTP-клиента в кэш. Потом решил заглянуть в Википедию, чтобы почитать про заместителя.
Обнаружил там занятное описание, которое не все могут понять. Вернее понять могут не только лишь все, не каждый может это сделать 😃
«Заместитель» хранит ссылку, которая позволяет заместителю обратиться к реальному субъекту (объект класса «Заместитель» может обращаться к объекту класса «Субъект», если интерфейсы «Реального Субъекта» и «Субъекта» одинаковы). Поскольку интерфейс «Реального Субъекта» идентичен интерфейсу «Субъекта», так, что «Заместителя» можно подставить вместо «Реального Субъекта», контролирует доступ к «Реальному Субъекту», может отвечать за создание или удаление «Реального Субъекта». «Субъект» определяет общий для «Реального Субъекта» и «Заместителя» интерфейс так, что «Заместитель» может быть использован везде, где ожидается «Реальный Субъект». При необходимости запросы могут быть переадресованы «Заместителем» «Реальному Субъекту».
Но почитать всё равно полезно! 👇
https://ru.wikipedia.org/wiki/Заместитель_(шаблон_проектирования)
Сегодня успешно использовал этот шаблон (кеширующий прокси), чтобы завернуть некоторые ответы HTTP-клиента в кэш. Потом решил заглянуть в Википедию, чтобы почитать про заместителя.
Обнаружил там занятное описание, которое не все могут понять. Вернее понять могут не только лишь все, не каждый может это сделать 😃
«Заместитель» хранит ссылку, которая позволяет заместителю обратиться к реальному субъекту (объект класса «Заместитель» может обращаться к объекту класса «Субъект», если интерфейсы «Реального Субъекта» и «Субъекта» одинаковы). Поскольку интерфейс «Реального Субъекта» идентичен интерфейсу «Субъекта», так, что «Заместителя» можно подставить вместо «Реального Субъекта», контролирует доступ к «Реальному Субъекту», может отвечать за создание или удаление «Реального Субъекта». «Субъект» определяет общий для «Реального Субъекта» и «Заместителя» интерфейс так, что «Заместитель» может быть использован везде, где ожидается «Реальный Субъект». При необходимости запросы могут быть переадресованы «Заместителем» «Реальному Субъекту».
Но почитать всё равно полезно! 👇
https://ru.wikipedia.org/wiki/Заместитель_(шаблон_проектирования)
OneCode
Скинуть завтра мой пример использования шаблона Proxy?
Ребяты, спасибо за голосование! Подготовил скрины с примерами, но НЕ влезает в телегу никаким боком. Сокращать не хочется, чтобы не упустить важные детали, потому что менее опытные коллеги здесь могут не понять суть. Поэтому завтра постараюсь записать видео, где покажу клёвый пример реализации шаблона Proxy из практики. Уверен многим будет полезно. Доброй ночи!
🔥9👍7
DBngin
Бесплатная программа для MacOS, которая позволяет в пару кликов запустить сервер базы данных (PostgreSQL, MySQL, Redis), выбрав нужную версию.
https://dbngin.com
#tools #db
Бесплатная программа для MacOS, которая позволяет в пару кликов запустить сервер базы данных (PostgreSQL, MySQL, Redis), выбрав нужную версию.
https://dbngin.com
#tools #db
👍4
Привет, банда! У нас юбилей 500 участников на канале 😀 Если кто-то хочет выйти - не надо! Дайте полюбоваться 😀
На самом деле это круто и спасибо вам всем, потому что наше сообщество - это каждый отдельный участник!
Я уверен, что здесь у нас только осознанные, умные и талантливые люди! Айтишники! Другие просто не могли попасть сюда 😀
Пользуясь случаем хочу напомнить, что у нас есть ещё один канал, где я выкладываю всякую фигню из жизни. Если интересно - залетай 👇
https://t.me/indigoram89_blog
ПС: про видос помню, скоро будет 🙏
Всем хороших выходных!
На самом деле это круто и спасибо вам всем, потому что наше сообщество - это каждый отдельный участник!
Я уверен, что здесь у нас только осознанные, умные и талантливые люди! Айтишники! Другие просто не могли попасть сюда 😀
Пользуясь случаем хочу напомнить, что у нас есть ещё один канал, где я выкладываю всякую фигню из жизни. Если интересно - залетай 👇
https://t.me/indigoram89_blog
ПС: про видос помню, скоро будет 🙏
Всем хороших выходных!
👍23🔥2👏1
Фантастические уязвимости и где они обитают
Сегодня пропёрло на чтиво, так что вот ещё годнота по фронтенду и безопасности:
https://habr.com/ru/company/simbirsoft/blog/659847/
Сегодня пропёрло на чтиво, так что вот ещё годнота по фронтенду и безопасности:
https://habr.com/ru/company/simbirsoft/blog/659847/
👍1
На днях понадобилось развернуть старый проект, написанный с использованием Laravel 7 и базы данных MySQL 5.7.
Первым делом я обновил Laravel до 9 версии, что кстати заняло менее часа с учетом того, что я делал каждое изменение, которое показывал GitHub.
Дальше решил перенести базу данных на PostgreSQL, потому что она по ощущениям работает быстрее и более популярна сегодня.
Смена движка базы данных оказалось новой задачей для меня.
Сначала попробовал перенести через обычный дамп, но ничего не вышло, потому что SQL слишком сильно отличается.
Дальше начал гуглить и нашел PgLoader, созданный как раз для моей задачи.
Особых сложностей здесь не возникло - установил, запустил и всё получилось. Так что рекомендую.
К слову мне НЕ нужно было переносить сами данные, а только лишь восстановить всю структуру базы - таблицы, индексы, связи и тд. Но я думаю с данными тоже НЕ возникло бы особых проблем.
https://pgloader.io/
#tools #db #postgres #pg
Первым делом я обновил Laravel до 9 версии, что кстати заняло менее часа с учетом того, что я делал каждое изменение, которое показывал GitHub.
Дальше решил перенести базу данных на PostgreSQL, потому что она по ощущениям работает быстрее и более популярна сегодня.
Смена движка базы данных оказалось новой задачей для меня.
Сначала попробовал перенести через обычный дамп, но ничего не вышло, потому что SQL слишком сильно отличается.
Дальше начал гуглить и нашел PgLoader, созданный как раз для моей задачи.
Особых сложностей здесь не возникло - установил, запустил и всё получилось. Так что рекомендую.
К слову мне НЕ нужно было переносить сами данные, а только лишь восстановить всю структуру базы - таблицы, индексы, связи и тд. Но я думаю с данными тоже НЕ возникло бы особых проблем.
https://pgloader.io/
#tools #db #postgres #pg
👍14🔥5
Enum Style Guide
Размышления о том, как оформлять Enum в PHP.
Поддерживаю автора 👍
https://stitcher.io/blog/php-enum-style-guide
#php #enum
Размышления о том, как оформлять Enum в PHP.
Поддерживаю автора 👍
https://stitcher.io/blog/php-enum-style-guide
#php #enum
🔥3👏1