Esta biblioteca PHP implementa una infraestructura de alternancia de funciones.
El uso de la biblioteca trompette/feature-toggles
puede ayudar a un equipo a ofrecer nuevas funciones a los usuarios de forma iterativa y segura; en otras palabras: permite una implementación continua.
Para obtener más información sobre el tema, consulte Alternancias de funciones (también conocidas como Indicadores de funciones) en MartinFowler.com.
La biblioteca trompette/feature-toggles
se distribuye en Packagist.
Se puede agregar como una dependencia del proyecto con el siguiente comando:
composer require trompette/feature-toggles
Cuando se trabaja en una nueva versión de una página, implementar gradualmente la nueva versión puede aportar mucha confianza al equipo.
Pero también implica más trabajo, ya que el equipo necesita:
Con la biblioteca trompette/feature-toggles
, habilitar la nueva versión se realiza preguntando al enrutador de alternancia si el usuario actual tiene una característica:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
Antes de usar el enrutador de alternancia, se debe registrar la función 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 '
));
Al definir una característica, se debe hacer referencia a una estrategia de alternancia para especificar el algoritmo que decide si un objetivo tiene una característica.
Las estrategias implementadas son:
OnOff
,Whitelist
,Percentage
. Y las estrategias se pueden combinar con operadores booleanos, como este: onoff and whitelist
, onoff or whitelist or percentage
, etc.
Ahora que el registro de funciones está configurado, se puede crear el enrutador de alternancia:
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 ]
);
Las estrategias se inyectan como una matriz indexada con nombres: estas son las referencias que se deben utilizar al registrar características.
El enrutador de palanca se puede utilizar para configurar una función para una estrategia determinada:
$ 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 );
Los cambios de configuración persisten llamando al método asociado en la instancia de la estrategia.
Todos los repositorios de configuración de Doctrine DBAL pueden migrar un esquema, ya que todos implementan la interfaz SchemaMigrator
:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
Todo el código anterior es opcional cuando se usa Symfony: todo está unido por la clase FeatureTogglesBundle
.
Es necesario registrar el paquete en config/bundles.php
para beneficiarse de la integración de Symfony:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
El paquete se puede configurar como se describe en 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
Para obtener detalles técnicos, consulte la clase FeatureTogglesConfiguration
.
Sólo hay un servicio declarado como público: el enrutador de conmutación con TrompetteFeatureTogglesToggleRouter
o TrompetteFeatureTogglesToggleRouterInterface
como identificador.
También hay comandos de consola útiles definidos como servicios y etiquetados con 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
Puede encontrar más información sobre los comandos en sus mensajes de ayuda.
Para obtener detalles técnicos, consulte la clase FeatureTogglesExtension
.
La biblioteca trompette/feature-toggles
se publica bajo la licencia MIT.
Consulte el archivo de LICENCIA para obtener más detalles.
La biblioteca trompette/feature-toggles
está inspirada en una práctica y una herramienta utilizada por el equipo de desarrollo de Food Assembly.
El equipo descubrió la práctica con el artículo Experimentación web con nuevos visitantes en el blog de ingeniería de Etsy.