이 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
클래스에 의해 함께 접착됩니다.
Symfony 통합의 이점을 활용하려면 config/bundles.php
에 번들을 등록해야 합니다.
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 라이센스에 따라 출시됩니다.
자세한 내용은 LICENSE 파일을 참조하세요.
trompette/feature-toggles
라이브러리는 Food Assembly 개발 팀에서 사용하는 실습 및 도구에서 영감을 받았습니다.
팀은 Etsy 엔지니어링 블로그의 신규 방문자를 통한 웹 실험 기사를 통해 이러한 관행을 발견했습니다.