Similar presentations:
Боли проекта frontend
1.
Боли проекта frontendВыдача врачей/страница врача
2.
Причины:• Много команд работает с репозиторием
выдачи врачей/страницы врача
• Нет документации
• Новичку приходится постоянно пинговать и
выковыривать инфу у коллег
3.
Управляемые и неуправляемыекомпоненты
Разделение data layer от view layer
4.
Управляемые и неуправляемыекомпоненты
Why
• Растет с каждой фичей и плохо кастомизируется
• Затрудняет кастомизацию компонента
• Props drilling
5.
Управляемые и неуправляемыекомпоненты
What:
• композиция более мелких компонентов
• compound component
• context
6.
Super componentsЗачастую такие компоненты появляются в следствии подхода выше
7.
Super componentsWhy
• Усложняется читаемость
• Увеличивается связанность компонентов
• Затрудняет кастомизацию компонента
8.
Super componentsWhat
• Фабрики
• Продуманная, плоская
композиция компонентов
• Compound components
• Context
• Slots
• Function as a children
9.
Реализация хелперов прямо в компонентахГеттеры, рендер-функции, нормализация данных
10.
Реализация хелперов прямо в компонентахWhy
• Код начинает шуметь
• Существенно увеличиваем объем кода в компоненте
• Функции могут использовать стейт или множество других переменных
компонента от этого их сложнее читать и поддерживать
11.
Реализация хелперов прямо в компонентахWhat
• Выносить локальные хелперы в отдельный файл
12.
Композиция файлов в компоненте/фичеКуда и как складывать подкомпоненты, типы компонента, хелперы, константы, хуки компонента?
13.
Композиция файлов в компоненте/фичеWhy
• Команд много, людей много из-за этого каждый делает по своему
14.
Композиция файлов в компоненте/фичеWhat
• Найти компромисс по структуре
утилит, констант, локальных
хуков и т.д.
15.
Слой API-ручек16.
Слой API-ручекWhy
• Непонятная структура в папке
• Нормализация данных прямо в компонентах
• Обычно типизация ручек довольно объемная, поэтому непонятно где
типизация для dto, а где для response
• Boilerplate
• Нет обработки ошибок
17.
Реализация хелперов прямо в компонентахWhat
Под каждый домен выделяем папку. В ней будут располагаться:
• Код для вызова ручки.
• Типизация ручки - dto + response.
• Утилиты для ручки - форматтеры урла, адаптеры (мапперы).
• Нормальзация данных с бэкенда производиться в самой ручке. Важно
предпоготовить данные для компонентов, а не форматировать данные уже в
самих компонентах.
• Пример api-слоя делал Ваня Волченков в проекте медкарты - EMedCard
Web
18.
Реализация хелперов прямо в компонентахWhat
Под каждый домен выделяем папку:
• Код для вызова ручки.
• Типизация ручки - dto + response.
• Утилиты для ручки - форматтеры урла, адаптеры (мапперы).
• Нормальзация данных с бэкенда производиться в самой ручке. Важно
предпоготовить данные для компонентов, а не форматировать данные уже в
самих компонентах.
• Пример api-слоя делал Ваня Волченков в проекте медкарты - EMedCard
Web
19.
Services/utils/helpers/libsА куда класть тот или иной хелпер?
Why
• Непонятна текущая структура папки services
20.
Services/utils/helpers/libsWhat
• client - только для клиентской части. Возможно стоит сюда складывать
специфичные для проекта сервисы (promocode.ts, recentDoctors.ts,
price.ts, sso.ts)
• server - хелперы специфичные для сервера (logger для node.js, microdata)
и адаптеры для formatJson (сейчас два огромных адаптера).
• shared - код "внутренних" библиотек. Никакой конкретной бизнес логики,
максимально универсальный код - бери и паблишь в нпм (arrays.ts,
regexp.ts, cookie.ts, dates.ts)
• Общие хуки складываются в отдельную директорию
21.
Абстрактные type-alias для более ясного описания типов интерфейсов.Как более декларативно описывать интерфейсы?
Why
What
22.
Остальные пункты:• Взаимодействие с web-storage
• События аналитики
• useEffect в компоненте = баг
• Отмена запросов
• Отсутствие какой-либо обработки ошибок в запросах
• Боли с обновление компонентов ДЗ/npm пакетов - дублирование
• Отказ от baseUi/pwa
• Эксперименты как заводим, где храним, как используем, как удаляем и т.д.
• Возможно есть смысл делить выдачу врачей и страницу врача на два отдельных проекта
• fsd?
• Разделение типизации format.json
• Один стор для выдачи и для страницы врача, для выдачи грузим стор для страницы врача и наоборот
• Использование js вместо css. Избавиться от useMediaQuery
sociology