該 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 工程部落格上的文章《與新訪客進行 Web 實驗》發現了這種做法。