Reactify | Frontend Разработка
5.41K subscribers
655 photos
52 videos
39 files
254 links
Reactify - это активное Frontend сообщество для бесплатного обучения веб-разработке.

Менторство:
https://reactify.ru

YouTube канал:
https://youtube.com/@reactify-it

Записи занятий менторства:
https://t.me/reactify_community_bot

Связь:
@ruslan_kuyanets
Download Telegram
Фабричный метод

Фабричный метод (Factory Method) - это паттерн проектирования, который позволяет создавать объекты определенного типа, не указывая конкретный класс объекта. Вместо этого вы создаете фабричный метод, который будет решать, какой класс объекта создавать на основе входных данных или условий. Этот паттерн полезен, когда у вас есть семейство классов с общим интерфейсом, и вам нужно выбирать конкретную реализацию в зависимости от контекста.

Вот когда можно использовать фабрику:

1️⃣ Когда у вас есть несколько типов объектов с общим интерфейсом: Если у вас есть набор объектов, которые имеют схожий интерфейс, но различаются по конкретной реализации, фабрика может помочь создать объекты этого семейства без необходимости знать конкретный класс.

2️⃣ Когда нужно сократить зависимость между клиентским кодом и конкретными классами: Фабрика помогает изолировать клиентский код от деталей создания объектов, что делает систему более гибкой и менее связанной.

3️⃣ Когда нужно обеспечить централизованное создание объектов: Если вы хотите, чтобы все объекты создавались через один и тот же механизм, фабрика обеспечивает эту централизованную точку создания.

#programming #patterns #factory
Я не изучал паттерны программирования целенаправленно. В процессе разработки я старался улучшить свой код, иногда перенимая самые логичные и эффективные подходы, которые мне встречались. В итоге, когда я приступил к изучению паттернов, я был удивлен, обнаружив, что многие из них мне уже знакомы и активно используются в моей работе. Это было похоже на 'переоткрытие' существующих шаблонов проектирования, к которым я пришел сам в процессе разработки.

Мне не приходилось учить их целенаправленно, и я не пытался их внедрять везде и всегда. Опыт, полученный в процессе рефакторинга кода и создания новых проектов, позволял мне каждый раз реализовывать одно и то же, но всегда стараться делать лучше. В итоге я приходил к пониманию того, что открывал для себя паттерн, даже не зная, что это уже существующий шаблон.

#programming #patterns
Прототип

Прототип (Prototype Pattern) - это паттерн проектирования, который используется для создания объектов, основываясь на шаблонном объекте. Этот паттерн особенно удобен в ситуациях, где создание экземпляров является затратным или сложным. Вместо создания объектов с нуля, вы создаете копии объекта, который служит прототипом, и вносите в эти копии необходимые изменения.

Вот когда стоит использовать Прототип:

1️⃣ Когда создание экземпляра класса требует больших затрат ресурсов: Если инициализация объекта занимает много времени или ресурсов (например, из-за загрузки данных из файла или базы данных), вы можете использовать существующий экземпляр в качестве прототипа для создания новых экземпляров.

2️⃣ Когда система должна быть независимой от способа создания, состава и представления объектов: Прототип позволяет избежать привязки к конкретным классам объектов, необходимых для создания. Это достигается за счет использования общего интерфейса для создания новых объектов из прототипа.

3️⃣ Когда необходимо создавать объекты в ситуации, где классы могут изменяться динамически: Вы можете изменять прототипы во время выполнения программы и создавать новые объекты, основываясь на измененных прототипах.

Примером реализации Прототипа может служить ситуация, где необходимо создать множество объектов с похожими свойствами. Вместо того, чтобы инициализировать каждый объект индивидуально, можно создать один прототип с общими свойствами, а затем создавать новые объекты, копируя этот прототип и изменяя только необходимые атрибуты.

ВАЖНО: Пример демонстрирует паттерн, похожий на "Прототип" в контексте React, но это не классическое использование паттерна. В React предпочтительнее композиция компонентов и передача пропсов. Традиционный паттерн "Прототип" в JavaScript встречается в встроенных прототипах, таких как Array.prototype, позволяющих объектам наследовать общие свойства и методы.

#programming #patterns #prototype
Адаптер

Паттерн адаптер позволяет объектам с несовместимыми интерфейсами работать вместе. Он действует как мост между двумя разными интерфейсами, позволяя им взаимодействовать без изменения их кода. Это достигается путем создания адаптера, который оборачивает один из объектов и переводит его вызовы к другому объекту в формате, который он может обрабатывать.

В контексте фронтенд-разработки, особенно при использовании React, паттерн адаптер может быть полезен для интеграции сторонних библиотек или API, интерфейсы которых не соответствуют структуре вашего приложения.

Например, у нас есть приложение для новостей с множеством компонентов и разнообразными полями данных. В случае смены API может произойти изменение структуры данных: вместо "title" теперь будет "headline" и так далее. При таких обстоятельствах нам пришлось бы вносить изменения во все компоненты приложения. Адаптер же позволяет избежать этого, адаптируя данные к единому формату. Теперь, при смене API, необходимо вносить изменения только в адаптер, не затрагивая остальные части приложения.

#patterns #adapter
Классы в React

В React преобладает все таки функциональное программирование, где мы пишем компоненты функции и управляем ими с помощью функций. Классовые компоненты уже не используются (кроме ErrorBoundary). Значит ли это что мы вообще не используем классы в React?

Хотя классовые компоненты в React стали менее популярными, классы как таковые не утратили своей актуальности. Они применяются в различных аспектах разработки:

Организация логики приложения
Классы могут быть использованы для создания сервисов или утилит, которые объединяют логику или API-запросы. Это позволяет централизовать и упорядочить взаимодействие с внешними сервисами и источниками данных.

Вынос методов из компонентов
Для поддержания чистоты и читаемости компонентов, можно вынести часть логики в отдельные классы. Это особенно полезно, когда одна и та же логика используется в нескольких компонентах.

Применение паттернов проектирования
Некоторые паттерны, такие как Strategy, Adapter или Factory, легче и естественнее реализовывать с использованием классов. Это способствует лучшей организации кода и его повторному использованию.

Преимущества:

Структурированность и читаемость
Повторное использование кода
Инкапсуляция и модульность

Недостатки:

Классы могут добавлять дополнительную сложность, особенно для новичков.
В некоторых случаях, функциональные подходы могут предложить большую гибкость и удобство в использовании.

#frontend #patterns #class
Мост

Мост (Bridge Pattern) - это структурный дизайн паттерн, который разделяет один или несколько классов на две отдельные иерархии — абстракцию и реализацию, позволяя им развиваться независимо друг от друга. Это достигается за счет создания композиционной связи между абстракцией (чаще всего интерфейсом пользователя) и её реализацией (конкретной платформой или технологией). Такой подход позволяет избежать постоянной привязки абстракции к одной реализации, облегчая тем самым масштабирование и адаптацию к новым требованиям.

Вот когда стоит использовать паттерн Мост:

1️⃣ Когда нужно избежать "жесткого" связывания абстракции и её реализации: Это особенно важно в ситуациях, где абстракция и реализация могут развиваться независимо друг от друга, или когда реализация должна быть выбираема или переключаема во время выполнения программы.

2️⃣ Когда изменения в реализации не должны влиять на клиентов: Использование паттерна Мост позволяет изолировать изменения в реализации от кода клиента, который использует абстракцию.

3️⃣ Когда необходимо разделять и управлять большим набором классов: В случаях, когда существует множество классов, образующих иерархии абстракций и реализаций, паттерн "Мост" помогает упорядочить и упростить структуру.

Примером реализации паттерна Мост в контексте React и функционального программирования может служить ситуация, где компонент React (абстракция) делегирует некоторые из своих задач другому JavaScript объекту (реализация). Это может быть, например, компонент интерфейса, который взаимодействует с разными источниками данных. Вместо того, чтобы интегрировать логику работы с данными напрямую в компонент, можно использовать паттерн Мост, чтобы отделить эту логику.

#patterns #bridge
Наблюдатель

Наблюдатель (Observer) — это поведенческий паттерн проектирования, который обеспечивает создание механизма подписки, благодаря которому объекты могут получать уведомления о событиях, происходящих в других объектах. Этот механизм улучшает взаимодействие между компонентами системы, делая их взаимосвязь гибкой и минимизируя их зависимость друг от друга.

В архитектуре паттерна "Наблюдатель" выделяют два основных типа участников: "субъект" и "наблюдатели". Субъект — это объект, за состоянием которого следят наблюдатели. Когда состояние субъекта меняется, он автоматически оповещает об этом все подписанные на него объекты-наблюдатели. Наблюдатели, в свою очередь, реагируют на эти изменения, выполняя определенные действия.

Примером реализации паттерна Наблюдатель может служить Стейт менеджер. Когда при изменении какого-то значения, наш интерфейс должен отреагировать.

#patterns #observer
Фасад

Фасад (Facade) — это структурный паттерн проектирования, который предоставляет упрощённый интерфейс к сложной системе, библиотеке или фреймворку. В контексте фронтенд-разработки, фасад может быть использован для обеспечения простого доступа к сложным библиотекам или API, скрывая за собой их внутреннюю сложность и предоставляя разработчикам более понятный и удобный способ взаимодействия.

Фасад (Facade):
Предоставляет простой интерфейс к сложной подсистеме. В фронтенде это может быть, например, класс или библиотека, предоставляющая упрощённые методы для выполнения распространённых задач, таких как работа с HTTP-запросами, обработка дат и времени или взаимодействие с API.

Сложная подсистема:
Состоит из различных модулей, библиотек или фреймворков, которые выполняют разнообразные задачи, но являются сложными в прямом использовании из-за своей детализации или специфической реализации.

Применение:
В ситуации, когда фронтенд-разработчик работает с веб-приложением, требующим взаимодействия с разнообразными внешними API, прямое обращение к каждому из них может привести к необходимости написания обширного и повторяющегося кода. Это касается выполнения HTTP-запросов, обработки ошибок и преобразования форматов данных.

Без фасада: Разработчику приходится писать сложный и многочисленный код для каждого API, что увеличивает риск ошибок и усложняет поддержку кода.

С фасадом: Разработчик вводит класс ApiFacade, который служит упрощённым интерфейсом для выполнения стандартных операций, таких как получение данных пользователя или списка товаров. Этот класс скрывает сложности каждого API, упрощая код и делая его более управляемым.

#patterns #facade
Рендер-пропсы (Render Props)

Рендер-пропс — это техника в React, при которой компонент получает функцию через свои пропсы. Эта функция возвращает React элементы, которые затем рендерятся компонентом. Самое важное в рендер-пропсе — это то, что он позволяет внешнему коду определять часть рендеринга компонента, тем самым увеличивая его гибкость и переиспользуемость.

Преимущества:

Гибкость: Компоненты становятся более адаптивными, поскольку их внешний вид и поведение могут быть легко изменены без необходимости изменять сам компонент.

Переиспользование логики: Рендер-пропсы позволяют извлекать и переиспользовать логику рендеринга между компонентами, уменьшая дублирование кода.

Чистота и изолированность: Компоненты, использующие рендер-пропсы, обычно сосредоточены на выполнении одной задачи, что делает их более изолированными и легкими для тестирования.

Пример:

Компонент ProductCards показывает карточки продуктов, но не задаёт, как они должны выглядеть. Вместо этого, он получает функцию renderCard через пропсы. Эта функция применяется к каждому продукту в списке products, позволяя определить уникальное отображение для каждой карточки. Таким образом, ProductCards становится гибким и многоразовым, а внешний вид карточек легко настраивается снаружи.

#react #patterns
Составные компоненты

Составные компоненты — это паттерн проектирования, который используется для создания комплексных интерфейсов путем комбинирования нескольких компонентов в один управляющий компонент (контейнер) и множество настраиваемых дочерних компонентов. Этот подход обеспечивает гибкость в разработке и упрощает процесс создания взаимосвязанных компонентов пользовательского интерфейса.

Основные части:
Родительский компонент (контейнер): Управляет состоянием и координирует взаимодействие между дочерними компонентами.

Дочерние компоненты: Используются для отображения содержимого или функционала, настраиваются с помощью пропсов.

Преимущества:
Модульность: Улучшает переиспользование кода за счет разделения интерфейса на мелкие компоненты.

Гибкость: Дает возможность настраивать поведение и внешний вид компонентов через пропсы.

Облегчение поддержки: Упрощает обновление и поддержку кода благодаря централизованному управлению состоянием.

#react #patterns
Геттеры пропсов

Подход "геттеры пропсов" (Props Getters) в React — это шаблон проектирования, используемый для создания более гибких и переиспользуемых компонентов. Он позволяет библиотекам и компонентам предоставлять пользователю API для управления поведением компонента с помощью получения свойств (props), которые затем могут быть изменены или объединены перед передачей дочернему компоненту.

В основе этого паттерна лежит функция, которая возвращает объект свойств (props), который затем может быть передан дочернему компоненту. Эта функция может принимать аргументы, позволяющие пользователю указывать, какие именно свойства должны быть изменены или добавлены.

Преимущества
Гибкость: Пользователи компонента могут изменять и добавлять пропсы, не переписывая основную логику компонента.

Переиспользование: Позволяет создавать более обобщенные компоненты, которые могут быть адаптированы для различных ситуаций.

Управление состоянием: Упрощает управление состоянием вложенных компонентов, предоставляя централизованный способ для их настройки.

Недостатки
Сложность: Может увеличить сложность кода, особенно если используется в больших и сложных компонентах.

Производительность: Создание дополнительных функций и объединение объектов пропсов может негативно сказаться на производительности, если не использовать этот паттерн аккуратно.

#react #patterns
Тинькофф Круглый стол по Frontend

Вчера был на крутом мероприятии в офисе Тинькофф в Краснодаре. Всего было за всю историю 3 круглых стола, я был на каждом из них😁

Люблю такие мероприятия, там нет спикера, есть просто темы и мы по очереди обсуждаем каждую из них в неформальной обстановке. Кушаем пиццу, кто-то пьет пивко (все за счет Тинькофф).

Вчера была тема паттернов. Обсудили Solid, Поведенческие, структурные, порождающие паттерны. Оказалось, я достаточно много знаю про них😁

В общем холиварили как обычно, а потом просто болтали после основной части мероприятия.

В очередной раз убедился, что ведение блога повышает скилл и знания😎

Почти все паттерны я объяснял тут на канале. Найти можно по тегам #patterns или #solid
А главное, что я приводил понятные примеры из React. Планирую продолжить эту рубрику
Паттерн Наблюдатель в JavaScript. Продвинутый Frontend на реальных примерах

В этом видео мы рассмотрим Паттерн Наблюдатель (Observer) в контексте JavaScript и Frontend разработки.

Для проекта Рецептов используем Webpack, JavaScript.

Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.

Видео уже на канале! Четвертая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #patterns #observer #redux
Паттерн Адаптер в React. Продвинутый Frontend на реальных примерах

В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте React и Frontend разработки.

Для проекта Маркет используем Vite, FSD, TypeScript.

Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом React и паттернах проектирования.

Видео уже на канале! Четвертая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #patterns #adapter
Паттерн Наблюдатель в React. Продвинутый Frontend на реальных примерах

В этом видео мы рассмотрим Паттерн Наблюдатель (Observer) в контексте React и Frontend разработки.

Для проекта Маркет используем Vite, FSD, TypeScript.

Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом React и паттернах проектирования.

Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #patterns #observer
Паттерн Адаптер в JavaScript. Продвинутый Frontend на реальных примерах

В этом видео мы рассмотрим Паттерн Адаптер (Adapter) в контексте JavaScript и Frontend разработки.

Для проекта Рецептов используем Webpack, JavaScript.

Видео предназначено для разработчиков, желающих повысить свои навыки в продвинутом JavaScript и паттернах проектирования.

Видео уже на канале! Пятая серия видеокурса
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #patterns #adapter
👩‍💻 5 продвинутых паттернов в React

Каждый разработчик хочет писать универсальный, чистый код, который не будет повторяться, будет оптимизированным и легкомасштабируемым. В этом видео мы разберем 5 продвинутых паттернов и подходов в React

- Slot Pattern (Component Injection)
- Render Prop
- Proxy Component
- Function as a Child
- Compound Components

Видео уже на канале!
Я не оставляю ссылку, так как видео лучше продвигается, если заходить на него напрямую с YouTube. Это помогает улучшить его рейтинг и увеличить шансы на органическое продвижение.

#frontend #react #patterns
Please open Telegram to view this post
VIEW IN TELEGRAM