Подход реализации фильтров для интернет магазина на Laravel

  Рет қаралды 6,767

Просто о Laravel. CutCode

Просто о Laravel. CutCode

Күн бұрын

Новый ролик из рубрики "Плохой/хороший коД" по просьбам подписчиков;) Разберем на этот раз неудачную реализацию фильтров. Очень распространённая задача для интернет магазинов.
#интернетмагазин#laravel#cutcode
---------------------------------------------------------------------------------
❗️❗️❗️Поддерживайте канал, оформите доступ на моём проекте cutcode! Это очень модно - cutcode.ru/
🤖🤖🤖Мой помощник Тэйлор готов выдать тебе подарок. Забирать тут - cutcode.ru/chat-bot
---------------------------------------------------------------------------------
⏰ Таймкоды:
00:00 Введение
01:34 Обзор проекта
03:28 Что выполнено
04:39 Обзор app.php, сервис провайдера и фильтров
08:48 RangeFilter
09:28 Как добавлять новые фильтры
10:22 Фильтр с датой
11:37 Аргумент values
12:22 Тестирование
12:40 Подведение итогов
Всех приветствую на канале Cutcode! Мы продолжаем рубрику плохой хороший код.
Я заметил по недавнему опросу в сообществе, что это одна из наиболее интересных вам рубрик и как раз недавно мне попал проект в руки на код review . Проект с реализацией фильтров подобно тем что мы часто видим в интернет магазине. Сам проект простой, скажем так mvp на данном этапе реализуется с целью протестировать будет ли он иметь спрос на рынке. У меня же стояла задача провести небольшое code review и доработать немного логику фильтров. Но то что я увидел меня серьезно смутило и в дальнейшем я набросал свою реализацию. Ну а сейчас продемонстрирую вам как было на мой взгляд плохой код и как стало - хорошей гибкий расширяемый и легко тестируемый код. Немного отходя от темы могу сказать что заказчик крайне ограничивает во времени и просто спешит получить хотя бы какой-то рабочий продукт поэтому не стоит винить предыдущего разработчика в отсутствии рефакторинга иногда обстоятельства скажем так не позволяют. Но я же категорично отношусь к таким моментам и избегаю работу в коде с явным запашком, который в целом не так сложно исправить. А если нет, то проблемы будут наслаиваться и со временем ударят огромным комом. Ладно давайте взглянем о чем речь - погнали!
Визуально - как я уже говорил проект без дизайна. Frontend накидал разработчик - здесь мы имеем проект скажем так фриланс биржа среди психотерапевтов и на странице поиска присутствуют фильтры с большим набором критериев. Давайте взглянем чтобы понимать что мы будем обсуждать. Вот такой набор фильтров многие из них похожи по принципу работы, но на уровне запросов к базе имеют и расхождения в условиях. А теперь давайте взглянем на первоначальный код реализации.
На главной странице у нас все хорошо есть выборка всех необходимых психотерапевтов с пагинаций, а сама магия фильтрации уходит в scope filtr и это отличное решение. Но давайте взглянем на сам scope. Мы с вами только что видели что на проекте огромное количество различных фильтров и процесс реализации запросов к базе выглядит вот так - просто полотно условий, где что не разобрать. Большое количество дублей одних и тех же условий. Заказчик планирует расширять фильтры, добавлять новые, усложнять как визуальную часть так и часть логики и работать с тем что есть сейчас согласитесь мягко говоря неприятно. А тестировать так вообще боль. Ну и давайте также взглянем на фронт-энд часть вывода фильтров.
Ну друзья я честно говоря если на backend еще можно закрыть глаза и скрипя зубами работать, то фронт-энд совсем боль здесь дубли кода даже не вынесены в отдельные файлы и такой простой механизм казалось бы у нас оброс давайте посмотрим - практически на 1000 строк кода. Думаю тут даже не стоит что-то комментировать.
---------------------------------------------------------------------------------
📹 делитесь этим видео с друзьями:
• Подход реализации филь...
🔔 подпишитесь на KZbin-канал: kzbin.info?s...
📼 Курс по Laravel с нуля:
• Курс по Laravel 8 обуч...
Подход реализации фильтров для интернет магазина на ларавел
---------------------------------------------------------------------------------
🔗 наш сайт: cutcode.ru/
📷 наш instagram: / cutcoderu
📱 Наш telegram-канал: t.me/laravel_cutcode

Пікірлер: 42
@silentage6310
@silentage6310 2 жыл бұрын
тоже недавно фильтры для ИМ делал. только там фильтры в админке создавались и назначались на каждую категорию. а еще эти фильтры больше для SЕО, то есть нужно формировать для них урл, генерировать уник правильные заголовки, на некоторые комбинации добавлять уник тексты вручную. куча правил для того какие стр разрешено индексировать, а какие нет. и много других фишек. в общем было интересно :)
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Звучит интересно!
@im_fredy
@im_fredy 8 ай бұрын
@@CutCodeRu можно ссылку на гит? хочется посмотреть реализацию
@alexandershestakov2914
@alexandershestakov2914 2 жыл бұрын
Отлично! Не все мне ясно при первом просмотре. Хотелось бы код, чтобы поковыряться. Курс по интернет-магазину жду с нетерпением! Спасибо за ваш труд!
@user-ij8sn3sr6z
@user-ij8sn3sr6z 2 жыл бұрын
а что за курс?
@user-ke4uc3mg8g
@user-ke4uc3mg8g 2 жыл бұрын
Спасибо за материал! Видео из этой рубрики как всегда классное и полезное!))
@EvgenOl
@EvgenOl Жыл бұрын
А я смотрю, если автора хвалят, он лайкает. А если критикуют (не важно по делу или нет) то автор ни как не реагирует. Молодец чё. Сам код ревьюит. А свой код считает идеалом.
@a-gryaznov
@a-gryaznov 2 жыл бұрын
Обалденно! Супер! Спасибо!
@aplokhy
@aplokhy 2 жыл бұрын
Крутая рубрика. Ждём новых видео и курсов!
@Naikshy
@Naikshy 2 жыл бұрын
Круто, видно что не первий раз реализовуете функционал, соглашусь с тем что не всё до конца ясно, но идея да
@mnogokotin
@mnogokotin 2 жыл бұрын
спасибо за видос )
@user-mi2od9gr5x
@user-mi2od9gr5x 2 жыл бұрын
👍спасибо!
@sovrinfo
@sovrinfo Жыл бұрын
Спасибо за видео. Коммент в поддержку!
@MrFlip-fu2py
@MrFlip-fu2py 2 жыл бұрын
Спасибо за материал! Хорошая работа, как всегда. Немного, правда, режет глаз полное отсувствие PHPdocs для написанного, ну да это не критичное замечание :)
@user-vw6or7sv5c
@user-vw6or7sv5c 2 жыл бұрын
Наверное когда сам кодишь, то все ясно и понятно. Мне допустим, базовый фильтр не совсем понятен, много кода получилось. Может логику сделать как в middleware, т.е. каждый фильтр это отдельный файл, который что-то делает и передает результат по цепочке вниз. А в базовом фильтре просто очередь прописать.
@InfluxOW
@InfluxOW 2 жыл бұрын
Выглядит в целом неплохо, но есть один большой и очень скользкий момент - почему наша модель знает про контейнер и лезет туда за своими зависимостями? Будет удачнее либо передавать набор фильтров в этот скоуп, либо создать какой-то отдельный класс-сервис, который будет эти фильтры применять. Я бы предварительно выбрал первый вариант, в таком случае мы можем этот класс App заинжектить в метод контроллера и сразу получать набор доступных фильтров, передавая в скоуп. Таким образом мы избавимся от одной неявной зависимости.
@CutCodeRu
@CutCodeRu 2 жыл бұрын
В целом ролик о этапе трансформации условий для билдера в отдельный слой с фильтрами, вы можете в своей реализации выносить еще в слои
@i.sinica
@i.sinica 5 ай бұрын
Подскажите, пожалуйста, для совсем глупых)) Я в принципе во всем разобрался как работает этот подход к созданию фильтров и впечатлился, но не могу разобраться как сделать так чтобы грузились не все фильтры всегда, а только те что нужны для конкретной страницы. Ну например, есть у нас Товары, у них одни фильтры, а есть Фильмы, у них другие фильтры и т.д. Если я правильно понимаю то когда мы их регистрируем чем метод boot в сервис провайдере, они все создаются, т.е и нужные и ненужные. Получается мне нужно где-то по запросу вызывать фильтры, а не в методе boot? И имеет ли смысл их разносить по разным сервис провайдерам, если при таком подходе, насколько я понял, они все равно все вместе зарегистрируются в общем сервис провайдере?
@cardinaliv
@cardinaliv 2 жыл бұрын
Очень интересная реализация, не подскажите ли в какую сторону документаций/книг посмотреть что бы подробнее познакомиться с реализацией подобных структурных решений и не городить сложно читаемые/поддерживаемые методы скоупов. Спасибо за внимание и возможные рекомендации.
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Изучите паттерны проектирования. Если говорить о книгах то банда четырех или head first
@MsMavrin
@MsMavrin Жыл бұрын
Выложите пожалуйста код, очень нужно такой же фильтр сделать
@stolz999
@stolz999 2 жыл бұрын
Правильный подход, в отличие от первоначального кода. Заказчики с ума по этим фильтрам сходят. Как уже кто-то написал в комментарии - потом придет СЕОшник который заставит отдельные страницы с этими фильтрами делать и т.д. Если просто вывалить их скопом - потом всё равно переписывать придется. А указанным в видео методом всё выглядит лучше. Хотя и очень многословно (по коду, не по видео). Еще короче - на процедурах сделать. Но нонешняя молодёж так не умеет. Им абстракции надо. Ну что-ж, не зря вам по 100 тыщ платят.
@CutCodeRu
@CutCodeRu 2 жыл бұрын
С сеошниками это уже другая история)
@user-ew1uj9nu9p
@user-ew1uj9nu9p 2 жыл бұрын
ты бы мог сделать класс фильтра унаследоваться его от blade component и имплементировать scope . для нового разработчика его применение было бы уже более очевидным
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Как вариант
@user-rt4yf5tk4v
@user-rt4yf5tk4v 2 жыл бұрын
Здравствуйте. подскажите а можно ли скачать архив этого кода что бы изучить лучше?
@user-rt4yf5tk4v
@user-rt4yf5tk4v 2 жыл бұрын
если да то сбросьте ссылку плз)
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Как я могу скинуть коммерческий проект реальный
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Возможно сделаю фильтры отдельным пакетом но точно не в ближайшее время
@user-rt4yf5tk4v
@user-rt4yf5tk4v 2 жыл бұрын
@@CutCodeRu можно просто архив с этим всем) очень понравился код и хочу сам изучить и внедрять в свои пооекты) достаточно архива если это конечно возможно, спасибо!)
@user-rt4yf5tk4v
@user-rt4yf5tk4v 2 жыл бұрын
@@CutCodeRu понял) подумал код под видео) возможно только папку app и пару вьюх) очень код зашел)
@manzadey
@manzadey 2 жыл бұрын
Для вьюх я бы использовал компоненты, а для реализации фильтрации данных пайплайны. В целом ревью на 3,5/5
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Кардинально)
@ilya.pokrov
@ilya.pokrov Жыл бұрын
Хочется задать вопрос, который меня очень мучает после просмотра этого видео)) Я постараюсь доступнее объяснить свое недопонимание, насколько это возможно. Для того, чтобы получить в сайдбаре доступные фильтры, Вы используете "...->all()->pluck". Такой запрос к БД достаточно быстрый, но при таком подходе выбираются все доступные значения. Но если я, к примеру, выбрал страну "Россия", а в России только 1 доступный терапевт Вася из Москвы, которому 25 лет, нам нужно в этот запрос добавить условие "->where('country', 'Россия')" и т.д. по остальным выбранным фильтрам. Во-первых такой запрос будет выполняться уже долго. А во-вторых, те значения, от добавления которых терапевтов не увеличится в нашей выборке нет смысла выводить. Возвращаясь к моему же примеру, если у нас в России только 1 терапевт Вася из Москвы 25 лет, зачем делать доступными фильтры такие как возраст от 23 до 30 лет, если фактически его возраст 25 и от изменений этого критерия ничего не изменится. Аналогично и по всем остальным атрибутам - зачем выводить пол женский, если нам доступен только атрибут мужчины, все города, если город только Москва и т.д. Или я чего-то не допонимаю?
@iuhps
@iuhps 2 жыл бұрын
А если я в GET параметр вкину apply=true? Угадай что будет
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Ничего не будет а о чем речь?
@iuhps
@iuhps 2 жыл бұрын
@@CutCodeRu А ты попробуй
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Магия не произошла само собой, нет нигде завязки здесь на apply в реквесте
@mirokko
@mirokko Жыл бұрын
Интересный подход. Почему бы вместо непонятного App класса, название которого пугает, не сделать базовый FilterGroup + TherapistFilterGroup и в них спрятать уже работу с этим всем?
@CutCodeRu
@CutCodeRu Жыл бұрын
Почему бы и нет, сделайте по своему
@user-xr6mz1wb7q
@user-xr6mz1wb7q 2 жыл бұрын
Очень жду фильтр в котором у каждого опшина есть цифра с количеством результатов. (как в dns)
@CutCodeRu
@CutCodeRu 2 жыл бұрын
Думаю это уже реализуем в курсе
"Огромная" зарплата менеджеров
0:43
ALEKSEY MERCEDES
Рет қаралды 354 М.
Service container in Laravel - architectural concept and injection in Laravel
9:14
Просто о Laravel. CutCode
Рет қаралды 10 М.
Эффект Карбонаро и нестандартная коробка
01:00
История одного вокалиста
Рет қаралды 10 МЛН
Heartwarming Unity at School Event #shorts
00:19
Fabiosa Stories
Рет қаралды 24 МЛН
How to Upgrade to Laravel 9: Live-Coding Demo
7:06
Laravel Daily
Рет қаралды 52 М.
Как магазины хранят фильтры в URL? Плюс разбор и процентная нотация!
16:50
WebDev с нуля. Канал Алекса Лущенко
Рет қаралды 19 М.
Laravel Controllers: Concept of Service and Actions
6:15
Просто о Laravel. CutCode
Рет қаралды 10 М.
LARAVEL + Clean Architecture // Роман Постников
24:03
Студия Флаг
Рет қаралды 9 М.
Эффект Карбонаро и нестандартная коробка
01:00
История одного вокалиста
Рет қаралды 10 МЛН