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-toggles
Saat 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.