Pustaka PHP ini mengimplementasikan infrastruktur sakelar fitur.
Menggunakan pustaka trompette/feature-toggles dapat membantu tim untuk menghadirkan fitur baru kepada pengguna secara berulang dan aman, dengan kata lain: memungkinkan penerapan berkelanjutan.
Untuk informasi lebih lanjut mengenai topik ini, lihat Feature Toggles (alias Feature Flags) di MartinFowler.com.
Pustaka trompette/feature-toggles didistribusikan di Packagist.
Itu dapat ditambahkan sebagai ketergantungan proyek dengan perintah berikut:
composer require trompette/feature-togglesSaat mengerjakan versi baru suatu halaman, menerapkan versi baru secara bertahap dapat memberikan kepercayaan diri yang besar pada tim.
Namun hal ini juga memerlukan lebih banyak pekerjaan, karena tim perlu:
Dengan pustaka trompette/feature-toggles , pengaktifan versi baru dilakukan dengan menanyakan router sakelar apakah pengguna saat ini memiliki fitur:
if ( $ toggleRouter -> hasFeature ( $ currentUser , ' new_page_version ' )) {
$ templating -> render ( ' new_page.tpl ' , $ newParameters );
} else {
$ templating -> render ( ' page.tpl ' , $ parameters );
} Sebelum menggunakan router sakelar, fitur new_page_version harus didaftarkan:
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 '
));Saat mendefinisikan suatu fitur, strategi peralihan harus direferensikan untuk menentukan algoritme yang memutuskan apakah suatu target memiliki fitur.
Strategi yang diterapkan adalah:
OnOff ,Whitelist ,Percentage . Dan strategi dapat digabungkan dengan operator boolean, seperti: onoff and whitelist , onoff or whitelist or percentage , dll.
Sekarang setelah registri fitur dikonfigurasi, router sakelar dapat dibuat:
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 ]
);Strategi dimasukkan sebagai array yang diindeks dengan nama: ini adalah referensi yang harus digunakan saat mendaftarkan fitur.
Router sakelar dapat digunakan untuk mengonfigurasi fitur untuk strategi tertentu:
$ 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 );Perubahan konfigurasi dipertahankan dengan memanggil metode terkait pada instance strategi.
Semua repositori konfigurasi Doctrine DBAL dapat memigrasikan skema, karena semuanya mengimplementasikan antarmuka SchemaMigrator :
use Doctrine DBAL Connection ;
use Trompette FeatureToggles DBAL WhitelistStrategyConfigurationRepository ;
$ connection = new Connection (...);
$ repository = new WhitelistStrategyConfigurationRepository ( $ connection );
$ repository -> migrateSchema (); Semua kode sebelumnya bersifat opsional saat menggunakan Symfony: semuanya direkatkan oleh kelas FeatureTogglesBundle .
Mendaftarkan bundel di config/bundles.php diperlukan untuk mendapatkan manfaat dari integrasi Symfony:
return [
// ...
Trompette FeatureToggles Bundle FeatureTogglesBundle::class => [ ' all ' => true ],
]; Bundel dapat dikonfigurasi seperti yang dijelaskan oleh 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 Untuk detail teknis, lihat kelas FeatureTogglesConfiguration .
Hanya ada satu layanan yang dinyatakan sebagai publik: router sakelar dengan TrompetteFeatureTogglesToggleRouter atau TrompetteFeatureTogglesToggleRouterInterface sebagai pengidentifikasi.
Ada juga perintah konsol berguna yang didefinisikan sebagai layanan dan ditandai dengan 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
Informasi lebih lanjut tentang perintah dapat ditemukan di pesan bantuannya.
Untuk detail teknis, lihat kelas FeatureTogglesExtension .
Pustaka trompette/feature-toggles dirilis di bawah Lisensi MIT.
Lihat file LISENSI untuk lebih jelasnya.
Pustaka trompette/feature-toggles terinspirasi oleh praktik dan alat yang digunakan oleh tim pengembangan Food Assembly.
Tim menemukan praktik tersebut dalam artikel Eksperimen Web dengan Pengunjung Baru di Blog Teknik Etsy.