7 примеров запаха кода (code smell). Примеры на PHP.

  Переглядів 7,395

Андрей Шестаков

Андрей Шестаков

3 роки тому

Многие из нас при программировании, достигая некоторого уровня знаний становятся уверенными в своем коде, его грамотной структурности, красоте и легкости сопровождения.
Мы должны следовать объективным правилам и лучшим практикам максимально настолько, насколько это возможно.
Программирование как искусство эволюционирует десятки лет и нынче существует множество зарекомендовавших себя подходов. Мы спасем самих себя, если будем изучать эти подходы еще до того, как начнем писать непосредственный код в реальных проектах.
Даже несколько базовых правил из мира ООП помогает писать значимо лучший код. Сюда можно отнести такие концепции как SOLID, DRY, понятие паттернов и анти-паттернов.
Видео является вольным переводом и интерпретацией статьи: / what-are-code-smells-i...
Буду рад поддержке: лайк, комментарий (адекватная критика тоже приветствуется), денюжка - все мотивирует в плюс.
www.donationalerts.com/r/andr... - кошелек.

КОМЕНТАРІ: 44
@fsdf443fdfe
@fsdf443fdfe Рік тому
спасибо, очень понятно и структурировано. А самое главное, как часто бывает - не занудно!)
@RonRom
@RonRom 3 роки тому
Я думаю, что мы находимся на начале одного из самых популярных каналов в сфере веба в снг
@myloveiseternal3032
@myloveiseternal3032 6 місяців тому
Ох, я только что узнал, что от моего кода, видимо, попахивает) Спасибо за видео. Очень информативно)
@torburgmax
@torburgmax 4 місяці тому
не больше, чем от кода автора)
@soversus5374
@soversus5374 Місяць тому
Меньше верь всему... Один хайпажер решил рассказать, другие подхватили и побнесли в массы как истину в последней инстанции... ) Все что можно и нельзя описано в документации. Остальное видение отдельных разработчиков для холиваров, а не аксиома.
@user-yu2qv2ih9q
@user-yu2qv2ih9q 3 роки тому
Нужно больше рефакторинга. Видео плюс. Хочу ещё!
@soversus5374
@soversus5374 Місяць тому
Продукт будет или только бесконечный рефакторинг? ) К 85 годам увидим продукт? )))
@codingfox
@codingfox 2 роки тому
Думал скажешь банальщину из книжек, но я услышал для себя много неочевидных моментов) Спасибо
@origami6700
@origami6700 Рік тому
Очень круто, очень годно объясняете!
@userfromworld
@userfromworld 3 роки тому
Привет, будет классно если канал будет развиватся, здесь все класно все професианально спасибо
@bizargz6152
@bizargz6152 2 роки тому
Интересно, ждемс обсуждения
@yusuperproactive9568
@yusuperproactive9568 2 роки тому
Бро, нужно больше таких видео, очень информативно и подача на высоте, не забрасывай это дело, прошу. Сейчас сам почти миддл уровня достиг в php, но подобные ролики про пхп заставляют вспоминать то, что забыто, но важно
@Alexeykhrischatyy
@Alexeykhrischatyy 2 роки тому
Красава, все правильно и четко объяснил
@torburgmax
@torburgmax 4 місяці тому
ничего правильного только)
@statdotastaff6193
@statdotastaff6193 2 роки тому
Может будет интересно рассказать в следующих роликах Зачем нужен ООП и всегда ли нужно прибегать к объектам? Коротенько предыстория, юзаю CMS, реализованы классы работы с БД (вкинуть и взять из бд), шаблонизатор (завернуть данные по шаблонам), кэш. Дописываю свои модули, юзаю исключительно обычные функции, в функциях вызываю другие свои функции и дефолтные классы цмски и не понимаю как, а главное зачем мне новые классы, инкапсуляции и прочие принципы ООП?
@soldier529
@soldier529 2 роки тому
Андрей, спасибо за то, что делитесь опытом, очень познавательно, современно, не только по этому ролику сужу.
@megacyberbot
@megacyberbot 2 роки тому
Очень толково, информативно и понятно. Спасибо. Хочу спросить, когда лучше использовать объекты, а когда простые функции?
@torburgmax
@torburgmax 4 місяці тому
если того требует применение абстракции
@maximlukin5545
@maximlukin5545 2 роки тому
Спасибо вам за ролик!!! Сам пишу на php, а подобных видео не хватает.
@pragmatik3353
@pragmatik3353 3 роки тому
Идеально. Еще бы хотелось что-нибудь связанное с тестированием послушать от тебя. Codeception или PhpUnit. Как правильно организовывать интеграционные тесты, что есть фикстуры, стабы, моки и тд.
@user-wz6yb6cp7o
@user-wz6yb6cp7o 3 роки тому
Немного вводной по теме unit тестирования: ukposts.info/have/v-deo/eneoYYSNnZBiqX0.html
@vugpgu
@vugpgu 2 місяці тому
12:55 нерівнозначна заміна. У першому випадку завжди буде помилка, у другому є сценарій без помилки
@mitivil1134
@mitivil1134 Рік тому
Хороший урок! Извините, но я бы посоветовал использовать метод setAge(int $age) {} Это хорошая практика на мой взгляд. Упрощать код всегда хорошо, но и в частности наименований. Сэкономит ещë 2 секунды.
@torburgmax
@torburgmax 4 місяці тому
это просто плохая практика
@user-zr6zv3kt3g
@user-zr6zv3kt3g 2 роки тому
12:55 Так неправильно переписан пример :) В первом варианте у тебя метод всегда возвращает строку, а во втором может быть как строка, так и void. Если бы соблюдалась строгая типизация, ты бы тут же словил эксепшн. В остальном, всё гуд, новичкам будет полезно взять на заметку.
@mrfriz
@mrfriz 3 роки тому
Это инфа из книг? Посоветуй первоисточники, откуда ты берёшь инфу
@torburgmax
@torburgmax 4 місяці тому
что поменялось в примере на 6-й минуте? мы защитили класс от изменений? нет. так же можем менять, но теперь через методы. мы добавили слой абстракции? да, но зачем? практика сеттеров и геттеров в таком примере определенно плоха, наши методы не обеспечивают ничего, кроме более легкого поиска в проекте. понравилось, что в следующем примере объясняется про солид, и на тебе - логин, который валидирует введенный текст, что нарушает первый принцип. да еще и без комментария о том, как работает регулярка (комментарии до этого мы же считаем не нужными). про следующий пример, который пользователя регистрирует по логину я уж молчу) в последнем примере тоже красота. красивые слова об open-closed, дескать создадим отдельный класс, а не массив, чтобы не менять функцию логина. ну создали, ок. а если в классе ошибки появится еще какое-то поле, мы точно не изменим метод логина? изменим) опять де молчу про то, что в классе Error, содержится переменная error, которая может быть true или false. надеюсь, что за два года с момента публикации этого ролика, автор стал чуть ближе к пониманию того, такое солид и ооп
@vugpgu
@vugpgu 2 місяці тому
Інкапсуляція. Код як документація
@user-gy3fs1mq5z
@user-gy3fs1mq5z Рік тому
Здравствуйте, подскажите как вы считаете стоит ли забивать Контейнер классами хелперами которые содержат например один статический метод (который просто умножает приходящие к нему числа)?
@user-wz6yb6cp7o
@user-wz6yb6cp7o Рік тому
Если метод статический, то добавление классов в контейнер сомнительное занятие. Выгода не понятна. Только, если есть цель использовать нечто похожее на фасады (facade) в laravel, но вроде вопрос не в этом ключе. В общем, обычно так не делаю сам. Можно обращаться к статическому методу напрямую, если мы говорим про PHP.
@user-gy3fs1mq5z
@user-gy3fs1mq5z Рік тому
интересно ваше мнение, надеюсь ответите не забудете)
@user-wz6yb6cp7o
@user-wz6yb6cp7o Рік тому
@@user-gy3fs1mq5z Если метод статический, то добавление классов в контейнер сомнительное занятие. Выгода не понятна. Только, если есть цель использовать нечто похожее на фасады (facade) в laravel, но вроде вопрос не в этом ключе. В общем, обычно так не делаю сам. Можно обращаться к статическому методу напрямую, если мы говорим про PHP.
@user-lh9wz4hi5z
@user-lh9wz4hi5z 3 роки тому
Крутое видео. Полезная инфа. Хотелось бы услышать от Вас примеры применения шаблонов проектирования из реальной жизни (без котиков и собачек). Выучил большинство шаблонов, вроде все понял, а при решении задач трудно начать внедрять их. P.S. Очки лишние.
@user-wz6yb6cp7o
@user-wz6yb6cp7o 3 роки тому
Благодарю. Многие паттерны уже реализованы на уровне фреймворков и библиотек, но в верхне-уровнем коде тоже приходится применять. Материалов на данную тему в сети достаточно много, посмотрю на досуге, может какие-то темы еще не освещены. Спасибо!
@acerlmt
@acerlmt Рік тому
15:55 а класс какой длины? Бывает встречаю по 2к строк и даже по 4к.. Как по мне - лучше небольше 1к, больше - уже сложно ориентироваться
@torburgmax
@torburgmax 4 місяці тому
если будете писать на чистом ооп, то за пару сотен, большинство из которых отступы, лучше не переваливать)
@darknet106
@darknet106 3 роки тому
Почему бизнес логика в сервисах а не в сущностях?
@Kopatych69
@Kopatych69 3 роки тому
Неплохо, спасибо. Говнокоду бой !!!
@sashasss7114
@sashasss7114 2 роки тому
Все хорошо, но не люблю когда демонстрируют примеры и говорят "ну так делать не нужно", а зачем ты это тогда показываешь? Показывайте на нормальных, реальных примерах, пусть будет сложнее, дольше, но за то реально чему то научит.
@artemkonyukhov6635
@artemkonyukhov6635 2 роки тому
Беда в том, что так пишут люди которые не знают как правильно. К сожалению это не выдуманные примеры, это то с чем приходиться сталкиваться при ревью кода коллег. Вы всегда можете создать свой блог и выложить свой вариант примеров, которые вам кажутся более правильными.
@cheefoxcheefox2372
@cheefoxcheefox2372 2 місяці тому
Есть нормальное слово: "говнокод". Вот тут какие-то запахи ... Прям слушать тяжело. Говнокод! Вот
PHP: выборка данных из БД и генераторы
29:24
Андрей Шестаков
Переглядів 10 тис.
Шпаргалка: unit тестирование. Fake, stub, mock. Примеры на PHPUnit.
20:05
Get a knife! | Standoff 2
01:06
Standoff 2 Live
Переглядів 1,5 млн
Эта Мама Испортила Гендер-Пати 😂
00:40
Глеб Рандалайнен
Переглядів 9 млн
КОД КАК У СЕНЬОРА. РЕФАКТОРИНГ
22:59
ITentika Online
Переглядів 62 тис.
PHP 8.0 - 8.2 | Производительность и фичи
18:19
R class Tech
Переглядів 14 тис.
PHP улучшаем производительность: настройки PHP-FPM
20:16
Андрей Шестаков
Переглядів 14 тис.
Протоколы для web API: SOAP VS REST
8:39
Андрей Шестаков
Переглядів 20 тис.
Get a knife! | Standoff 2
01:06
Standoff 2 Live
Переглядів 1,5 млн