HighLoad++ 2017
Зал «Пекин + Шанхай», 8 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2991.html
Нынче стало модно выделять UI-компоненты в отдельную библиотеку и использовать её в нескольких проектах. Мы в команде почты Mail.ru делаем так же, но столкнулись с проблемой: каждый разработчик, меняя библиотеку под свои нужды, обязательно ломает что-нибудь, что работало у других.
Я расскажу о том, как мы решили эту проблему, и о том, какие инструменты для этого можно использовать. Storybook, BackstopJS, Jest, Webdriver.io, TypeScript - в их числе.
18. • TDD – Test Driven Development
• ПНХДД – Потом Напишем иХ Дривен Девелопмент
• ПДР – Пофиг Дривен Ревью
18
Методологии разработки
19. Из чего состоит UI библиотека?
62%
75%
61%
49%
38%
25%
39%
51%
SEMANTIC UI REACT TOOLBOX ANT DESIGN MAIL.RU TOOLKIT
JavaScript CSS
19
20. BEM в Почте Mail.RU
• BEM-схема именования классов
• BEM-файловая структура
• ENB сборщик
20
21. Отступления от BEM
• Переопределяем стили на уровне проекта
• Влияем одними блоками на другие
• Отступы и прочие «внешние» стили блоков
21
22. Недостатки процесса
• Разработка в рамках сервиса
• Огромные merge request
• Субъективные требования к тестам
• Нет тестов на CSS
• Неправильный BEM
22
32. React Storybook
• Разработка библиотеки отдельно от проектов
• Hot Module Replacement из коробки
• Огромное количество плагинов
• Генерация сценариев
32
34. Рекомендации к вёрстке компонентов
• CSS-модули или аналог
• className и style не пробрасываются внутрь
• Не задавайте отступы у компонентов
• Не меняйте св-во display у компонентов
34
35. Ревью скриншотов
35
• Изменение скриншотов при каждом изменении CSS
• Избегайте менять и удалять скриншоты
• Согласуйте скриншоты с дизайнерами
• Не верьте своим глазам
• Соблюдайте методологию
45. Результат
• Комплексное тестирование для всего кода
• Разрабатываем библиотеку в Storybook
• Тратим минимум времени на тесты
• Пишем правильный CSS
• Знаем как всё это ревьювить
45
46. Нерешенные проблемы
• Устаревшие браузеры без Selenium не протестировать
• Масштабирование BackstopJS
• Внедрение подхода в сами микросервисы
46