Diese PHP-Bibliothek implementiert eine Infrastruktur zum Umschalten von Funktionen.
Die Verwendung trompette/feature-toggles
Bibliothek kann einem Team dabei helfen, Benutzern iterativ und sicher neue Funktionen bereitzustellen, mit anderen Worten: Sie ermöglicht eine kontinuierliche Bereitstellung.
Weitere Informationen zu diesem Thema finden Sie unter Feature Toggles (auch bekannt als Feature Flags) auf MartinFowler.com.
Die trompette/feature-toggles
Bibliothek wird auf Packagist verteilt.
Es kann mit dem folgenden Befehl als Projektabhängigkeit hinzugefügt werden:
composer require trompette/feature-toggles
Wenn Sie an einer neuen Version einer Seite arbeiten, kann die schrittweise Bereitstellung der neuen Version einem Team viel Selbstvertrauen geben.
Es bringt aber auch mehr Arbeit mit sich, da das Team Folgendes tun muss:
Bei trompette/feature-toggles
Bibliothek erfolgt die Aktivierung der neuen Version, indem der Toggle-Router gefragt wird, ob der aktuelle Benutzer über eine Funktion verfügt:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
}
Bevor Sie den Toggle-Router verwenden, muss die Funktion new_page_version
registriert werden:
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 '
));
Beim Definieren eines Features muss auf eine Umschaltstrategie verwiesen werden, um den Algorithmus anzugeben, der entscheidet, ob ein Ziel über ein Feature verfügt.
Umgesetzte Strategien sind:
OnOff
-Klasse.Whitelist
-Klasse.Percentage
. Und Strategien können mit booleschen Operatoren kombiniert werden, etwa so: onoff and whitelist
, onoff or whitelist or percentage
usw.
Nachdem die Funktionsregistrierung nun konfiguriert ist, kann der Toggle-Router erstellt werden:
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 ]
);
Strategien werden als mit Namen indiziertes Array eingefügt: Dies sind die Referenzen, die bei der Registrierung von Features verwendet werden sollten.
Mit dem Toggle-Router kann eine Funktion für eine bestimmte Strategie konfiguriert werden:
$ 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 );
Konfigurationsänderungen werden beibehalten, indem die zugehörige Methode auf der Strategieinstanz aufgerufen wird.
Alle DBAL-Konfigurationsrepositorys von Doctrine können ein Schema migrieren, da sie alle die SchemaMigrator
Schnittstelle implementieren:
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema ();
Der gesamte vorherige Code ist bei Verwendung von Symfony optional: Alles wird durch die FeatureTogglesBundle
-Klasse zusammengehalten.
Um von der Symfony-Integration zu profitieren, ist die Registrierung des Bundles in config/bundles.php
erforderlich:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
];
Das Bundle kann wie in config:dump-reference
beschrieben konfiguriert werden:
# 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
Technische Details finden Sie in FeatureTogglesConfiguration
-Klasse.
Es gibt nur einen als öffentlich deklarierten Dienst: den Toggle-Router mit TrompetteFeatureTogglesToggleRouter
oder TrompetteFeatureTogglesToggleRouterInterface
als Bezeichner.
Es gibt auch nützliche Konsolenbefehle, die als Dienste definiert und mit console.command
gekennzeichnet sind:
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
Weitere Informationen zu den Befehlen finden Sie in den entsprechenden Hilfemeldungen.
Technische Details finden Sie in der FeatureTogglesExtension
-Klasse.
Die trompette/feature-toggles
Bibliothek wird unter der MIT-Lizenz veröffentlicht.
Weitere Einzelheiten finden Sie in der LICENSE-Datei.
Die trompette/feature-toggles
Bibliothek ist von einer Praxis und einem Tool inspiriert, die vom Food Assembly-Entwicklungsteam verwendet werden.
Das Team entdeckte die Praxis mit dem Artikel Web Experimentation with New Visitors auf Etsys Engineering Blog.