Эта библиотека PHP реализует инфраструктуру переключения функций.
Использование библиотеки trompette/feature-toggles
может помочь команде итеративно и безопасно доставлять пользователям новые функции, другими словами: это обеспечивает непрерывное развертывание.
Дополнительную информацию по этой теме см. в разделе «Переключение функций» (также известном как «Флаги функций») на сайте MartinFowler.com.
Библиотека trompette/feature-toggles
распространяется на Packagist.
Его можно добавить как зависимость проекта с помощью следующей команды:
composer require trompette/feature-toggles
При работе над новой версией страницы постепенное развертывание новой версии может принести команде большую уверенность.
Но это также требует дополнительной работы, поскольку команде необходимо:
С помощью библиотеки trompette/feature-toggles
включение новой версии осуществляется путем запроса маршрутизатора-переключателя, есть ли у текущего пользователя функция:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
Перед использованием переключателя маршрутизатора необходимо зарегистрировать функцию new_page_version
:
use Trompette FeatureToggles FeatureDefinition ;
use Trompette FeatureToggles FeatureRegistry ;
$ featureRegistry = new FeatureRegistry ();
$ featureRegistry -> register ( new FeatureDefinition (
$ name = ' new_page_version ' ,
$ description = ' awesome new version of a page ' ,
$ strategy = ' whitelist '
));
При определении функции необходимо использовать стратегию переключения, чтобы указать алгоритм, определяющий, имеет ли цель функцию.
Реализованные стратегии:
OnOff
,Whitelist
,Percentage
класс. Стратегии можно комбинировать с логическими операторами, например: onoff and whitelist
, onoff or whitelist or percentage
и т. д.
Теперь, когда реестр функций настроен, можно создать переключатель-маршрутизатор:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
use Trompette FeatureToggles ToggleRouter ;
use Trompette FeatureToggles WhitelistStrategy Whitelist ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ whitelist = new Whitelist ( $ repository );
$ toggleRouter = new ToggleRouter (
$ featureRegistry ,
$ strategies = [ ' whitelist ' => $ whitelist ]
);
Стратегии внедряются в виде массива, индексированного по именам: это ссылки, которые следует использовать при регистрации функций.
Переключатель маршрутизатора можно использовать для настройки функции для данной стратегии:
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' on ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' onoff ' , ' off ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' allow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' whitelist ' , ' disallow ' , ' target ' );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 25 );
$ toggleRouter -> configureFeature ( ' feature ' , ' percentage ' , ' slide ' , 50 );
Изменения конфигурации сохраняются путем вызова соответствующего метода экземпляра стратегии.
Все репозитории конфигурации Doctrine DBAL могут переносить схему, поскольку все они реализуют интерфейс SchemaMigrator
:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
Весь предыдущий код не является обязательным при использовании Symfony: все склеивается классом FeatureTogglesBundle
.
Регистрация пакета в config/bundles.php
необходима для использования преимуществ интеграции с Symfony:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
Пакет можно настроить, как описано в config:dump-reference
:
# Default configuration for extension with alias: "feature_toggles"
feature_toggles :
doctrine_dbal_connection : doctrine.dbal.default_connection
declared_features :
# Prototype
name :
description : ~ # Required
strategy : ~ # Required
Технические подробности см. в разделе Класс FeatureTogglesConfiguration
.
Существует только одна служба, объявленная общедоступной: маршрутизатор-переключатель с идентификатором TrompetteFeatureTogglesToggleRouter
или TrompetteFeatureTogglesToggleRouterInterface
.
Существуют также полезные консольные команды, определенные как службы и отмеченные тегом console.command
:
feature-toggles
feature-toggles:configure-feature Configures a feature
feature-toggles:migrate-dbal-schema Migrates DBAL schema
feature-toggles:show-feature-configuration Shows a feature configuration
Более подробную информацию о командах можно найти в их справочных сообщениях.
Технические подробности см. в разделе Класс FeatureTogglesExtension
.
Библиотека trompette/feature-toggles
выпущена под лицензией MIT.
Более подробную информацию смотрите в файле ЛИЦЕНЗИИ.
Библиотека trompette/feature-toggles
основана на практике и инструменте, используемых командой разработчиков Food Assembly.
Команда обнаружила эту практику в статье «Веб-эксперименты с новыми посетителями» в инженерном блоге Etsy.