ไลบรารี 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 ใช้
ทีมงานได้ค้นพบแนวทางปฏิบัติดังกล่าวในบทความ Web Experimentation with New Visitors ใน Etsy's Engineering Blog