تطبق مكتبة 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 الهندسية.