Встал пол шестого, чтобы смонтировать видео, так что привет всем, кто тоже проснулся со сранья! 😁
👍18😁5👏3
Агрегация в моделях Laravel
В новом видео на практике изучили методы для агрегации в SQL-запросах к базе данных.
На примере донатов рассмотрели объединение и группировку данных.
Вывели статистику донатов в кабинете пользователя.
Полезные советы и мотивация.
https://youtu.be/yDb4tLTfMb8
Подпишись: @onecode_blog
В новом видео на практике изучили методы для агрегации в SQL-запросах к базе данных.
На примере донатов рассмотрели объединение и группировку данных.
Вывели статистику донатов в кабинете пользователя.
Полезные советы и мотивация.
https://youtu.be/yDb4tLTfMb8
Подпишись: @onecode_blog
🔥18❤10👍4🎉3
Вижу 50 заявок на вступление в VIP-канал, но по факту подключились около 20 - в чем проблема?
Коллеги, желаю всем хороших выходных и посмотреть видео из нашего курса ☝️
👌17👍11👨💻2☃1😍1🫡1
Принцип единой ответственности утверждает, что класс или модуль должен иметь только одну причину для изменения.
Этот принцип даёт нам как определение ответственности, так и критерий для оценки размера класса. Классы должны иметь одну ответственность, то есть одну причину для изменений. Принцип единой ответственности — одна из самых важных концепций в объектно-ориентированном проектировании. Кроме того, его относительно несложно понять и соблюдать.
Но как ни странно, принцип единой ответственности часто оказывается самым нарушаемым принципом проектирования классов. Мы постоянно встречаем классы, которые делают слишком много всего. Почему?
Заставить программу работать и написать чистый код — совершенно разные вещи. Обычно мы думаем прежде всего о том, чтобы наш код заработал, а не о его структуре и чистоте. И это абсолютно законно. Разделение ответственности в работе программиста играет не менее важную роль, чем в наших программах.
К сожалению, слишком многие из нас полагают, что после того, как программа заработает, их работа закончена. Мы не переключаемся на усовершенствование ее структуры и чистоты. Мы переходим к следующей задаче вместо того, чтобы сделать шаг назад и разделить разбухшие классы на отдельные блоки с единой ответственностью.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
Этот принцип даёт нам как определение ответственности, так и критерий для оценки размера класса. Классы должны иметь одну ответственность, то есть одну причину для изменений. Принцип единой ответственности — одна из самых важных концепций в объектно-ориентированном проектировании. Кроме того, его относительно несложно понять и соблюдать.
Но как ни странно, принцип единой ответственности часто оказывается самым нарушаемым принципом проектирования классов. Мы постоянно встречаем классы, которые делают слишком много всего. Почему?
Заставить программу работать и написать чистый код — совершенно разные вещи. Обычно мы думаем прежде всего о том, чтобы наш код заработал, а не о его структуре и чистоте. И это абсолютно законно. Разделение ответственности в работе программиста играет не менее важную роль, чем в наших программах.
К сожалению, слишком многие из нас полагают, что после того, как программа заработает, их работа закончена. Мы не переключаемся на усовершенствование ее структуры и чистоты. Мы переходим к следующей задаче вместо того, чтобы сделать шаг назад и разделить разбухшие классы на отдельные блоки с единой ответственностью.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
👍7🔥2👏2
Рабочий день кончился - самое время развернуть новый проект на Laravel 😁
Кайфово это делать через Laravel Sail:
- Одной командой указал какие базы данных нужны (pgsql, mysql, redis, meilisearch).
- Заварил чаю пока проект скачивается и устанавливается.
- Второй командой (sail up) запустил и всё работает.
При этом вся кухня крутится в docker-контейнере - изолированное окружение. Поигрался, удалил и на компе ничего не осталось.
Нравится 😍
Подпишись: @onecode_blog
Кайфово это делать через Laravel Sail:
- Одной командой указал какие базы данных нужны (pgsql, mysql, redis, meilisearch).
- Заварил чаю пока проект скачивается и устанавливается.
- Второй командой (sail up) запустил и всё работает.
При этом вся кухня крутится в docker-контейнере - изолированное окружение. Поигрался, удалил и на компе ничего не осталось.
Нравится 😍
Подпишись: @onecode_blog
🔥21👍5❤2
В тему предыдущего поста.
Говорят, что можно будет добавлять нужные сервисы после установки приложения через Laravel Sail. Например, забыл при установке указать soketi - не проблема. Одной командой Laravel Sail добавит его в проект.
Вот это реально удобно, чтобы не ковыряться с этими докерами-шмокерами.
Подпишись: @onecode_blog
Говорят, что можно будет добавлять нужные сервисы после установки приложения через Laravel Sail. Например, забыл при установке указать soketi - не проблема. Одной командой Laravel Sail добавит его в проект.
Вот это реально удобно, чтобы не ковыряться с этими докерами-шмокерами.
Подпишись: @onecode_blog
🔥9👍2
Многие разработчики опасаются, что множество небольших узкоспециализированных классов затруднит понимание общей картины. Их беспокоит то, что им придется переходить от класса к классу, чтобы разобраться в том, как решается более крупная задача.
Однако система с множеством мелких классов имеет не больше «подвижных частей», чем система с несколькими большими классами. В последней тоже придётся разбираться, и это будет ничуть не проще.
Так что вопрос заключается в следующем: хотите ли вы, чтобы ваши инструменты были разложены по ящикам с множеством небольших отделений, содержащих чётко определённые и подписанные компоненты?
Или вы предпочитаете несколько больших ящиков, в которые можно сваливать всё подряд?
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
Однако система с множеством мелких классов имеет не больше «подвижных частей», чем система с несколькими большими классами. В последней тоже придётся разбираться, и это будет ничуть не проще.
Так что вопрос заключается в следующем: хотите ли вы, чтобы ваши инструменты были разложены по ящикам с множеством небольших отделений, содержащих чётко определённые и подписанные компоненты?
Или вы предпочитаете несколько больших ящиков, в которые можно сваливать всё подряд?
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
👍6🤔2👌2🍌1
Первый доход от создания видео 😌
Большое спасибо всем, кто поддерживает меня в этом не лёгком творческом деле!
Вчера записал новое видео про Авторизацию. Материал получился объёмный - можно сказать мини-курс!😲
Сегодня вечером буду монтировать и опубликую в VIP-канале🙂 Хороших выходных!
Подпишись: @onecode_blog
Большое спасибо всем, кто поддерживает меня в этом не лёгком творческом деле!
Вчера записал новое видео про Авторизацию. Материал получился объёмный - можно сказать мини-курс!
Сегодня вечером буду монтировать и опубликую в VIP-канале
Подпишись: @onecode_blog
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21👍4👏4👌2❤1💩1
Авторизация. Полномочия и роли.
В новом видео подробно разобрались с авторизацией БЕЗ использования пакетов:
- Что такое авторизация?
- Какие проблемы решаем?
- Отличие от аутентификации
- Что здесь предлагает Laravel
- Разработали свою админку
- Управление администраторами
- Авторизация моделей через полиси
- Выдача и ограничение прав доступа
- Создание и назначение ролей
- Отдельная роль супер-админ
- Авторизация БЕЗ моделей
- Разные кейсы и нюансы
- Исходный код проекта
Залетай в закрытый VIP-канал, чтобы получить этот и другие практические урокам🔥
После заявки тебе напишет телеграм-бот Donate для оформления подписки.
Подпишись: @onecode_blog
В новом видео подробно разобрались с авторизацией БЕЗ использования пакетов:
- Что такое авторизация?
- Какие проблемы решаем?
- Отличие от аутентификации
- Что здесь предлагает Laravel
- Разработали свою админку
- Управление администраторами
- Авторизация моделей через полиси
- Выдача и ограничение прав доступа
- Создание и назначение ролей
- Отдельная роль супер-админ
- Авторизация БЕЗ моделей
- Разные кейсы и нюансы
- Исходный код проекта
Залетай в закрытый VIP-канал, чтобы получить этот и другие практические урокам
После заявки тебе напишет телеграм-бот Donate для оформления подписки.
Подпишись: @onecode_blog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8👌2😍2❤1
Laravel Helpers
Есть идея записать серию коротких видео, в которых покажу полезные функции-хелперы, которые использую (или когда-то использовал) в своей работе.
Сегодня прикинул о каких функциях можно рассказать и, к моему удивлению, набралось аж 35 функций! Сам не ожидал.
Добавлю, что большинство хелперов придумал сам в процессе решения той или иной проблемы, поэтому материал будет уникальный в своём роде.
Лайк и репост, если интересно! 👍
Есть идея записать серию коротких видео, в которых покажу полезные функции-хелперы, которые использую (или когда-то использовал) в своей работе.
Сегодня прикинул о каких функциях можно рассказать и, к моему удивлению, набралось аж 35 функций! Сам не ожидал.
Добавлю, что большинство хелперов придумал сам в процессе решения той или иной проблемы, поэтому материал будет уникальный в своём роде.
Лайк и репост, если интересно! 👍
👍47👎2
Вложенность в CSS
Походу скоро мы увидим нативную поддержку браузерами вложенности в CSS (пример на скрине).
Помню использовал раньше SASS в основном из-за переменных и вложенности. Переменные уже есть в CSS, а вложенность НЕ за горами.
https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/
Подпишись: @onecode_blog
Походу скоро мы увидим нативную поддержку браузерами вложенности в CSS (пример на скрине).
Помню использовал раньше SASS в основном из-за переменных и вложенности. Переменные уже есть в CSS, а вложенность НЕ за горами.
https://webkit.org/blog/13813/try-css-nesting-today-in-safari-technology-preview/
Подпишись: @onecode_blog
🔥13👍3💯1
Laravel Helpers 01
Начинаем серию коротких видео про полезные функции-хелперы для PHP и Laravel.
В первом видео:
- Что такое хелперы?
- Как их подключить?
- Пара советов
https://youtu.be/Jm-33Qnu7sY
Подпишись: @onecode_blog
#helpers
Начинаем серию коротких видео про полезные функции-хелперы для PHP и Laravel.
В первом видео:
- Что такое хелперы?
- Как их подключить?
- Пара советов
https://youtu.be/Jm-33Qnu7sY
Подпишись: @onecode_blog
#helpers
🔥16👍4👀2👌1
Разбиение больших функций на меньшие приводит к росту количества классов.
Допустим, имеется большой метод класса, в котором объявлено много переменных. Вы хотите выделить один небольшой фрагмент этого метода в отдельный метод. Однако выделяемый код использует четыре переменные, объявленные в исходном методе. Может, передать все четыре переменные новому методу в виде аргументов?
Ни в коем случае! Преобразовав эти четыре переменные в свойства класса, мы сможем выделить код без передачи переменных. Таким образом, разбиение метода на меньшие фрагменты упрощается.
К сожалению, это также означает, что наши классы теряют связность, потому что в них накапливается все больше свойств, созданных исключительно для того, чтобы они могли совместно использоваться небольшим подмножеством методов.
Но постойте! Если группа методов должна работать с некоторыми свойствами, не образуют ли они отдельный класс сами по себе? Конечно, образуют. Если классы утрачивают связность, разбейте их!
Таким образом, разбиение большого метода на много мелких также часто открывает возможность для выделения нескольких меньших классов. В результате строение программы улучшается, а ее структура становится более прозрачной.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
Допустим, имеется большой метод класса, в котором объявлено много переменных. Вы хотите выделить один небольшой фрагмент этого метода в отдельный метод. Однако выделяемый код использует четыре переменные, объявленные в исходном методе. Может, передать все четыре переменные новому методу в виде аргументов?
Ни в коем случае! Преобразовав эти четыре переменные в свойства класса, мы сможем выделить код без передачи переменных. Таким образом, разбиение метода на меньшие фрагменты упрощается.
К сожалению, это также означает, что наши классы теряют связность, потому что в них накапливается все больше свойств, созданных исключительно для того, чтобы они могли совместно использоваться небольшим подмножеством методов.
Но постойте! Если группа методов должна работать с некоторыми свойствами, не образуют ли они отдельный класс сами по себе? Конечно, образуют. Если классы утрачивают связность, разбейте их!
Таким образом, разбиение большого метода на много мелких также часто открывает возможность для выделения нескольких меньших классов. В результате строение программы улучшается, а ее структура становится более прозрачной.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
🔥9👍5🤔1
Laravel Helpers #2
Транзакция базы данных.
https://youtu.be/ur_BZ4-YMCk
Подпишись: @onecode_blog
#helpers
Транзакция базы данных.
https://youtu.be/ur_BZ4-YMCk
Подпишись: @onecode_blog
#helpers
👍10❤3🔥3👌1
Возможность построить «правильную систему с первого раза» — миф.
Города вырастают из городков, которые, в свою очередь, появляются на месте деревень. Дороги сначала узки и едва заметны, но со временем они расширяются и покрываются камнем. Мелкие строения и пустые места заполняются более крупными зданиями, часть из которых в конечном итоге будет заменена небоскребами.
На первых порах в городе полностью отсутствует инфраструктура: водопровод, электричество, канализация и (о ужас!) Интернет. Все эти возможности добавляются позднее, с ростом населения и плотности застройки.
Рост не обходится без проблем. Сколько раз вам приходилось едва ползти в потоке машин вдоль проекта по «расширению дороги», когда вы спрашивали себя: «Почему нельзя было сразу построить дорогу достаточной ширины?!»
Но иначе и быть не могло. Кто сможет объяснить затраты на строительство шестиполосной магистрали в середине маленького городка, которому предрекают расширение? Да и кто бы захотел иметь такую дорогу в своем городе? Вместо этого мы сегодня реализуем текущие потребности, а завтра перерабатываем и расширяем систему для реализации новых потребностей.
В этом заключается суть итеративной, пошаговой гибкой разработки. Разработка через тестирование, рефакторинг и полученный в результате их применения чистый код обеспечивают работу этой схемы на уровне кода.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
Города вырастают из городков, которые, в свою очередь, появляются на месте деревень. Дороги сначала узки и едва заметны, но со временем они расширяются и покрываются камнем. Мелкие строения и пустые места заполняются более крупными зданиями, часть из которых в конечном итоге будет заменена небоскребами.
На первых порах в городе полностью отсутствует инфраструктура: водопровод, электричество, канализация и (о ужас!) Интернет. Все эти возможности добавляются позднее, с ростом населения и плотности застройки.
Рост не обходится без проблем. Сколько раз вам приходилось едва ползти в потоке машин вдоль проекта по «расширению дороги», когда вы спрашивали себя: «Почему нельзя было сразу построить дорогу достаточной ширины?!»
Но иначе и быть не могло. Кто сможет объяснить затраты на строительство шестиполосной магистрали в середине маленького городка, которому предрекают расширение? Да и кто бы захотел иметь такую дорогу в своем городе? Вместо этого мы сегодня реализуем текущие потребности, а завтра перерабатываем и расширяем систему для реализации новых потребностей.
В этом заключается суть итеративной, пошаговой гибкой разработки. Разработка через тестирование, рефакторинг и полученный в результате их применения чистый код обеспечивают работу этой схемы на уровне кода.
Роберт Мартин, Чистый код #clean_code
Подпишись: @onecode_blog
👍17👌1