Esta biblioteca PHP implementa uma infraestrutura de alternância de recursos.
O uso da biblioteca trompette/feature-toggles
pode ajudar uma equipe a entregar novos recursos aos usuários de forma iterativa e segura, em outras palavras: permite a implantação contínua.
Para obter mais informações sobre o tópico, consulte Alternadores de recursos (também conhecidos como sinalizadores de recursos) em MartinFowler.com.
A biblioteca trompette/feature-toggles
é distribuída no Packagist.
Pode ser adicionado como uma dependência do projeto com o seguinte comando:
composer require trompette/feature-toggles
Ao trabalhar em uma nova versão de uma página, implantar gradualmente a nova versão pode trazer muita confiança para uma equipe.
Mas também traz mais trabalho, pois a equipe precisa:
Com a biblioteca trompette/feature-toggles
, a habilitação da nova versão é feita perguntando ao roteador de alternância se o usuário atual possui um recurso:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
Antes de usar o roteador de alternância, o recurso new_page_version
deve ser registrado:
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 '
));
Ao definir um recurso, uma estratégia de alternância deve ser referenciada para especificar o algoritmo que decide se um alvo possui um recurso.
As estratégias implementadas são:
OnOff
,Whitelist
,Percentage
. E as estratégias podem ser combinadas com operadores booleanos, como: onoff and whitelist
, onoff or whitelist or percentage
, etc.
Agora que o registro de recursos está configurado, o roteador de alternância pode ser criado:
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 ]
);
As estratégias são injetadas como um array indexado com nomes: estas são as referências que devem ser utilizadas no registro de funcionalidades.
O roteador de alternância pode ser usado para configurar um recurso para uma determinada estratégia:
$ 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 );
As alterações de configuração são persistidas chamando o método associado na instância da estratégia.
Todos os repositórios de configuração DBAL do Doctrine podem migrar um esquema, pois todos implementam a interface SchemaMigrator
:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
Todo o código anterior é opcional ao usar Symfony: tudo é agrupado pela classe FeatureTogglesBundle
.
É necessário registrar o pacote em config/bundles.php
para se beneficiar da integração do Symfony:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
O pacote pode ser configurado conforme descrito por 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 obter detalhes técnicos, consulte Classe FeatureTogglesConfiguration
.
Existe apenas um serviço declarado como público: o roteador toggle com TrompetteFeatureTogglesToggleRouter
ou TrompetteFeatureTogglesToggleRouterInterface
como identificador.
Existem também comandos de console úteis definidos como serviços e marcados com 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
Mais informações sobre os comandos podem ser encontradas nas mensagens de ajuda.
Para obter detalhes técnicos, consulte Classe FeatureTogglesExtension
.
A biblioteca trompette/feature-toggles
é lançada sob a licença MIT.
Consulte o arquivo LICENSE para obter mais detalhes.
A biblioteca trompette/feature-toggles
é inspirada em uma prática e ferramenta usada pela equipe de desenvolvimento do Food Assembly.
A equipe descobriu a prática com o artigo Experimentação na Web com novos visitantes no blog de engenharia da Etsy.