rambler.ios 6 - feature toggle
TRANSCRIPT
![Page 1: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/1.jpg)
Feature toggle
Станислав Цыганов @DevAlloy
![Page 2: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/2.jpg)
Задачи
• Настройки пользователя
• A/B тестирование
• Удаленное управление фичами
• Категоризация пользователей
• Настройки пользователя
• A/B тестирование
• Удаленное управление фичами
• Категоризация пользователей
![Page 3: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/3.jpg)
О чем поговорим
• Что такое feature toggle
• Их категории
• Возможные подходы к реализации
• Что такое feature toggle
• Их категории
• Возможные подходы к реализации
![Page 4: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/4.jpg)
Feature toggle
• Наличие состояния приложения, исходя из которого те или иные фичи считаются включенными или выключенными
• Состоянием может быть: конфигурационный файл с сервера, состояние сети, версия iOS
• Ветвление логики происходит в toggle point
![Page 5: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/5.jpg)
Категории
Основные метрики: •Продолжительности жизни •Степень гибкости
![Page 6: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/6.jpg)
Экспериментальные
• Очень динамичные (могут меняться по несколько раз во время одного запуска)
• Сюда же можно отнести фичи, которыми может управлять пользователь
• Фичи для A/B тестирования
![Page 7: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/7.jpg)
Системные
• Фичи, которые могут сильно влиять на производительность системы
• Потенциально опасные фичи, которые может понадобится удаленно отключить
![Page 8: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/8.jpg)
Разрешительные
• Выделение премиальных пользователей
• Внутреннее тестирование фичи
![Page 9: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/9.jpg)
Релизные
• Новый код предварительно закрывается if
![Page 10: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/10.jpg)
Релизные (Release)
• Все кидается в trunk(develop) ветку
![Page 11: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/11.jpg)
Возможные подходы
Зависят от:
• Динамичности фичи
• Архитектуры
![Page 12: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/12.jpg)
Динамические фичи
• Сервис настроек
• Реализация интерактора
![Page 13: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/13.jpg)
VC
Сервис настроек
Feature Service
![Page 14: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/14.jpg)
Сервис настроек
Presenter Interactor
Router
View
Feature Service
![Page 15: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/15.jpg)
Сервис настроек
Presenter Interactor
Router
View
Feature Service
![Page 16: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/16.jpg)
Сервис настроек
Presenter Interactor
Router
View
Feature Service
![Page 17: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/17.jpg)
Сервис настроек
Feature Service
![Page 18: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/18.jpg)
Сервис настроек
![Page 19: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/19.jpg)
Реализация интерактора
Presenter Interactor
Router
View
Services
![Page 20: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/20.jpg)
Реализация интерактора
Presenter Interactor
Router
View
Services
![Page 21: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/21.jpg)
Interactor
Реализация интерактора
![Page 22: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/22.jpg)
Реализация интерактора
![Page 23: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/23.jpg)
Различия
• Позволяет избежать большого сервиса
• Менее реиспользуем
![Page 24: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/24.jpg)
Presenter
Presenter/VC
![Page 25: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/25.jpg)
Presenter/VC
![Page 26: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/26.jpg)
Статические фичи
• Инъекция зависимостей
• Передача конфигурации
![Page 27: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/27.jpg)
Инъекция зависимостей• Правильные зависимости могут быть выбраны при инициализации
Service
![Page 28: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/28.jpg)
Инъекция зависимостей• Правильные зависимости могут быть выбраны при инициализации
ServiceService
InMemStorage fileStorage
![Page 29: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/29.jpg)
Инъекция зависимостей• Может быть реализована через инъекцию фабрики
![Page 30: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/30.jpg)
Инъекция зависимостей• Возможна проблема с повторяемостью кода
![Page 31: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/31.jpg)
Инъекция зависимостей• Возможна проблема с повторяемостью кода
![Page 32: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/32.jpg)
Инъекция зависимостей• Возможна проблема с повторяемостью кода
A B
![Page 33: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/33.jpg)
Инъекция зависимостей• Возможна проблема с повторяемостью кода
A
B
??
![Page 34: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/34.jpg)
Инъекция зависимостей• Возможна проблема с повторяемостью кода
CA
B
??
![Page 35: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/35.jpg)
Передача конфигурации• Конфигурация устанавливается извне
![Page 36: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/36.jpg)
Внимание!
• Не стоит инкапсулировать абсолютно все фичи
• Не стоит делать зависимые друг от друга фичи
![Page 37: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/37.jpg)
Что получаем?
• Инкапсуляцию фич
• Относительно простой переход между категориями feature toggle
• Спокойствие за "опасные" фичи
![Page 38: Rambler.iOS 6 - Feature toggle](https://reader031.vdocuments.mx/reader031/viewer/2022021423/58847e991a28ab5e248b7b99/html5/thumbnails/38.jpg)
Итоги• Feature toggle - подход, где поведения компонентов приложения может меняться в зависимости от стейта приложения
• Выделяются основные категории фич: Релизные, Экспериментальные, Системные и Разрешительные
• Подходы к реализации статических и динамических фич