Функциональные переключатели против функциональных ветвей
Что такое "функции переключателей" и "ветви функций" и в чем их различие?
Каковы плюсы и минусы? Почему один лучше другого?
Я нашел несколько статей об этом в Google, и я, как правило, нахожусь в лагере "Feature Toggles", но я не уверен, что "Feature Toggles" - лучший выбор во всех случаях.
3 ответа
Переключатели функций - это методология, используемая в цепочке непрерывной интеграции / непрерывной доставки (CI/CD) (методология проекта Agile/Kanban). По сути, вы отправляете новые функции в производство в отключенном состоянии, а затем в консоли администратора включаете эту функцию (или выключаете, если обнаружите, что она неисправна).
Ветви функций могут быть частью методологии выпуска и интегрированы в цепочку непрерывной интеграции. Вы можете разрабатывать в ветви функций, развертывать ветку в DEV/QA, получать сертификацию, объединять ветку функций в транк и затем передавать транк в среды SIT/UAT/PROD.
Есть плюсы и минусы, связанные с этим подходом. Переключение функций требует очень строгой дисциплины, так как сломанный / мрачный код делает это для производства. Это отлично подходит для стартапов и магазинов, где руководство знает, как справиться с этим и имеет инструменты для автоматизации системы (Chef/Puppet/cfengine и т. Д.). Google, Face book, LinkedIn, WordPress - все они развертываются в производственных средах с помощью переключения функций и автоматизации системы.,
Есть несколько обязательных "технических специалистов" для правильного переключения функций: непрерывная доставка / развертывание, непрерывная интеграция, автоматическое модульное тестирование, автоматическое интеграционное тестирование, автоматическое тестирование на стресс / производительность, автоматизация системы. Если у вас их нет, рассмотрите более простую стратегию выпуска (например, разветвление функции).
Я подробно обсуждаю это в своем блоге: http://geekswithblogs.net/Optikal/archive/2013/02/10/152069.aspx
Короче говоря, функциональные ветви обеспечат вам лучшую изоляцию, но потребуют, чтобы вы справились с болью отложенной интеграции и слияний. Переключатели дают вам непрерывную интеграцию, но требуют, чтобы вы разрабатывали / реализовывали свой код таким образом, чтобы поддерживать переключатели, и представляли риск того, что незавершенный код объекта может негативно повлиять на работу.
Вы можете использовать обе ветви и переключатели вместе (они не являются взаимоисключающими). Что касается решения о том, какой из них использовать в каждом сценарии, я думаю, что переключатели должны быть выбором по умолчанию, если не выполняются следующие условия:
- трудно скрыть функциональность за переключателем
- имеет потенциальное влияние на область приложения, которая не имеет тщательных испытаний
Если какое-либо из этих условий выполнено, я бы, вероятно, использовал функциональную ветвь вместо переключения.
Переключение функций требует очень строгой дисциплины, так как сломанный / мрачный код делает это в производство.
Я согласен, Electrawn, я использую функцию разветвления уже 6 лет, потому что в нашем случае у нас нет предварительных требований.
Также важно понимать, что "Стратегия Toogle" переносит усилия, потраченные в Стратегии ветвей функций (Объединение), на другой момент.
http://martinfowler.com/bliki/FeatureToggle.html
Очень важно отключить переключатели после того, как ожидающие функции будут запущены в производство. Это включает в себя удаление определений в файле конфигурации и всего кода, который их использует. В противном случае вы получите кучу переключателей, которые никто не может вспомнить, как использовать. В одном запоминающемся примере, о котором я слышал, потребовалась специальная перекомпиляция ядра linux для обработки достаточного количества ключей командной строки.
Примечание: следуя принципам SCM, если кто-нибудь откроет и отредактирует файл, это может быть неработающий код.
Итак, с моей точки зрения, я не верю в "лучший выбор во всех случаях", потому что это зависит от культуры вашей команды и наличия у вас тестового покрытия.
Ну, это очень полемический вопрос.
Я все еще предпочитаю стратегию Feature Branches в моем случае. Сохраняя лучшие практики SCM и планируя дорожную карту, процесс слияния, как правило, является простым способом. В течение этого года я слышал, как многие люди жалуются на процесс слияния, но во многих случаях проблема слияния та же, что и в моем опыте: "Сбой связи":)
Извините за неточный ответ, но я думаю, что есть некоторые человеческие аспекты вокруг этой темы лучшего выбора в SCM.