Здесь есть много отличных ответов, все из которых основаны на важном, базовом определении, популяризированном в посте Martin Fowler :
Это кусочки кода, которые "[разрешить] командам изменять поведение системы без изменения кода. "
Таким образом, мы исторически думали о них как представленные псевдокодом:
if(app_settings["beta-mode"] == "true")
showAwesomeNewGui();
else
sameOldSnoozeFeset();
Это полностьюточный способ думать об этом, и Мэтт, и Адиль прекрасно расширяют его с помощью разнообразных тактических вариантов использования флага функции.
Но я хотел бы предложить пересмотренное определение, отражающее эволюцию реальности.через шесть лет и перемен с тех пор дотнетдев задал оригинальный вопрос.Я работаю для Rollout.io , платформы флагов функций, поэтому у меня есть место в первом ряду для этой эволюции.
Проще говоря, флаги функций уже не простоспособ включить и выключить функции в вашем приложении.Это все равно что ответить «что такое позиция счета-фактуры», сказав «это описание и количество валюты».Да, но это не влияет на более широкий смысл самого счета.
Флаги функций - это тактические биты всеобъемлющего стратегического решения в современном программном обеспечении.Это средство, с помощью которого вы откладываете важную логику принятия решений в своем коде до времени выполнения, когда у вас будет больше информации.И, возможно, самое главное, они больше не происходят изолированно, с единственной проверкой, чтобы увидеть, больше ли номер версии 2.7 или нет;организации, которые их используют, обычно включают их как часть комплексного, общесистемного подхода к продукту.
Как уже упоминали другие, Facebook и LinkedIn первыми это сделали, но в 2018 году это сделали многие организации.Они откладывают вопросы логики принятия решений на время выполнения как часть стратегии развития, операционной стратегии (или стратегии DevOps, если хотите) и стратегии продукта.Вот примеры таких вопросов.
- Кто должен видеть новый экран администратора, который мы запускаем, и когда?
- Какой уровень членства необходим для разблокировки этого пасхального яйца?
- Когда мы должны перейти на новую базу данных?
- Должны ли мы поместить изображение гепарда или орла на кнопку проверки, чтобы улучшить конверсию?
Чтобы иметь приложение, которое откладывает значительное количество таких решений до времени выполнения, вы не можете добавлять флаги функций в свое приложение в режиме ad-hoc, иначе у вас возникнут технические долги.В настоящее время вам необходима всеобъемлющая стратегия управления флагами объектов, которая включает в себя несколько различных компонентов.
- Точки переключения используются для переключения поведения новых функций.
- Несколько точек переключения объединяются в переключатель .Маршрутизатор-переключатель определяет состояние функции.
- Контекст переключения предоставляет маршрутизатору-переключателю необходимую контекстную информацию (например, конкретного пользователя).
- Настройка переключения предоставляет маршрутизатору информацию о среде.
Итак, в конце концов, что такое флаги функций?
Что ж, они являются важной частью более широкой стратегиииметь приложение, которое адаптируется как к техническим, так и к рыночным потребностям.