Feature Flags для JS и PHP

При рассмотрении философий CI/CD мы вместо Feature Branches говорили о подходе Trank Based Development для скрытой разработки новой функциональности в основной Git-ветке.

Сегодня это сделаем на практике. Добавим к проекту инфраструктуру полноценной работы с Feature Toggle для фронтенда на ReactJS и бэкенда на PHP.

И при разработке компонента для бэкенда рассмотрим и применим принцип ISP из SOLID.

  • 00:00:32 - Continuous-методики
  • 00:01:40 - Неудобства подхода Feature Branches
  • 00:06:11 - Переход к практикам CI
  • 00:08:31 - Способы скрытой разработки
  • 00:10:29 - Подход с Feature Toggle
  • 00:15:01 - Запуск проекта
  • 00:15:51 - Команда обновления зависимостей
  • 00:19:44 - Упрощение E2E теста
  • 00:21:03 - Структура директорий фронтенда
  • 00:22:32 - Упрощение импорта через JS-индекс
  • 00:24:40 - Проверка контента в E2E
  • 00:26:04 - Выбор готового компонента
  • 00:27:41 - Прямая передача фич
  • 00:28:46 - Описание типов через PropTypes
  • 00:32:18 - Передача через FeaturesContext
  • 00:35:56 - Кастомный FeaturesProvider
  • 00:37:27 - Компонент FeatureFlag
  • 00:41:38 - Включение фич по Cookies
  • 00:43:58 - E2E тесты для проверки фич
  • 00:45:43 - Более удобное конфигурирование
  • 00:49:10 - Отключение через Cookie
  • 00:55:23 - Пользовательский хук useFeatures
  • 00:56:51 - Вынос списка фич в файл
  • 00:57:29 - Обзор результата для фронтенда
  • 00:58:19 - Feature Toggle для бэкенда
  • 00:59:47 - Сервис FeatureFlag
  • 01:03:25 - Способы включения для тестов
  • 01:04:58 - Конфигурирование фич для API
  • 01:07:13 - Расширение для Twig
  • 01:09:47 - Обработка HTTP-заголовка в Middleware
  • 01:11:12 - ISP из SOLID
  • 01:17:52 - Отключение для тестов
  • 01:21:13 - Логирование активных фич
  • 01:24:46 - Контекст для передачи данных
  • 01:27:14 - Handler для Monolog
  • 01:28:27 - Обзор результата в бэкенде
  • 01:29:01 - Нюанс работы с очередями
  • 01:31:49 - Выгоды подхода
  • 01:35:07 - Задача оптимизации Pipeline

А в следующем эпизоде займёмся оптимизацией Pipeline, чтобы сборка в Jenkins занимала меньше времени.

Скрытый контент (код, слайды, ...) для подписчиков. Открыть →
Дмитрий Елисеев
elisdn.ru
Комментарии (8)
Arunas

Спасибо.

Ответить
А

Спасибо. Побольше бы про SOLID.

Ответить
Yevhenii Lykholai

Спасибо. Про ISP очень понравилось.

Ответить
Евгений

Добрый день. Подскажите вы в одном из уроков упоминали файл с настройками для PhpStorm. Не могу найти.

Ответить
Дмитрий Елисеев

Когда устанавливали React создавали файл frontend/.editorconfig

Ответить
Руслан

Дмитрий, добрый день,

очень познавательно, используя Feature Flags стало более очевидным преимущество trunk based подхода версионирования сборок в сравнении с git flow. На Вашей практике, насколько часто используете trunk based workflow, есть советы когда он мало применим?

Спасибо.

PS: когда примерно ожидается выход следующего выпуска (OAuth2 с JWT)?))

Ответить
Дмитрий Елисеев

насколько часто используете trunk based workflow

В своих проектах всегда разбиваю большую задачу на микрозадачи и их сразу мелкими коммитами пушу в master. В чужих уже зависит от договорённостей внутри команды и команды с заказчиком.

есть советы когда он мало применим?

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

А вообще у такого подхода есть неудобство в том, что недоделанный код живёт не в отдельной ветке, а находится в рабочей ветке вперемешку с готовым. Приходится более скрупулёзно следить за актуальностью кода и не забывать время от времени вычищать код старых уже отключенных фич.

когда примерно ожидается выход следующего выпуска?

Обновимся до PHP 8 и начнём.

Ответить
Руслан

Дмитрий, благодарю за развернутый ответ, очень полезно, и спасибо за Ваш труд!

Ответить
Зарегистрируйтесь или войдите чтобы оставить комментарий

Или войти через:

Google
GitHub
Yandex
MailRu