افترض أنك تريد تطوير ميزة جديدة ، لكنك لست متأكدًا من أن المستخدمين سيحبونها ، وأنك بحاجة إلى طريقة لإخفائها دون ألم. أو افترض أنك تعمل على ميزة كبيرة جديدة وتريد تجنب ارتكاب الوحوش. أو تريد فقط جعل سلوك الموقع قابلاً للتكوين بسهولة. كيف يمكنني حل جميع هذه المشاكل ، وقراءة تحت القط.
المشكلة
تخيل أن دورات تطوير فريقك تستمر لمدة أسبوعين ، وأن تنفيذ ميزة جديدة سيتطلب 3 أشهر من التطوير من الفريق. للوهلة الأولى ، هناك مخططان محتملان للعمل:
- إنشاء فرع منفصل والقيام بكل العمل فيه لمدة ثلاثة أشهر ، القيام دوريا سحب من الفرع الأصل
- استخدم مفهوم التكامل المستمر (التكامل المستمر أو CI للاختصار ): حلل المهمة وقم بتجميد الكود في أجزاء صغيرة
كل من هذه الأساليب لها مزايا وعيوب واضحة:
استخدام محولات ميزة لحل المشاكل
تتم مواجهة مثل هذه المشكلة في كثير من الأحيان في التطوير وهناك حل أنيق يتيح لك الاستفادة بشكل أفضل من الأساليب الموضحة أعلاه -
تبديل الميزة أو
تبديل ميزة .
بشكل أساسي ، فإن أداة تبديل الميزات هي علامة منطقية يتم تخزينها في قاعدة البيانات وتحتوي على معلومات حول ما إذا كان يجب تمكين الميزة أم لا. يمكن استرداد قيمة هذه العلامة من قاعدة البيانات حسب المفتاح. تتمثل سهولة استخدام محولات الميزات في أنه يمكن تغييرها بسهولة من قبل مستخدم أعمال أثناء وقت التشغيل من خلال لوحة المسؤول دون الحاجة إلى إعادة نشر التطبيق.
فيما يلي مثال لاستخدام ميزة تبديل في Java:
if (configurationManager.getParameter("is.some.functionality.enabled")) {
في المثال أعلاه ،
configManager هي فئة تسمح لك باسترداد قيمة مبدل ميزة معينة من قاعدة البيانات بواسطة مفتاحها.
أيضًا ، بمساعدة محولات الميزات ، يمكنك عرض / إخفاء عناصر معينة على الواجهة الأمامية. للقيام بذلك ، تحتاج إلى وضع قيمة العلامة في النموذج وتمريرها إلى طريقة العرض كما هو موضح أدناه:
@ModelAttribute("isSomeFunctionalityEnabled") public void isSomeFunctionalityEnabled() { return configurationManager.getParameter("is.some.functionality.enabled"); }
ثم استخدم القيمة التي تم تمريرها لتقديم رمز HTML هذا أو ذاك:
<c:choose> <c:when test="${isSomeFunctionalityEnabled}"> <!-- Render some stuff --> </c:when> <c:otherwise> <!-- Render some other stuff --> </c:otherwise> </c:choose>
أنواع محولات ميزة
إن المفهوم الموضح لاستخدام محولات الميزة هو مجرد حالة استخدام واحدة ، وتسمى هذه المحولات ميزة تبديل إطلاق. في المجموع ، يتم تمييز 3 أنواع مختلفة من محولات الميزات:
- إطلاقات تبديل - تتيح لك إخفاء الميزات التي تم تنفيذها بشكل غير كامل أثناء تطويرها
- تبديل التجربة - مفاتيح لاختبار A / B
- تبديل الإذن - مفاتيح تشغيل / إيقاف تشغيل لمجموعات المستخدمين المختلفة
وبالتالي ، باستخدام محولات الميزات ، يمكنك إنشاء نسختين مختلفتين من الموقع على نفس قاعدة الشفرة ، باستخدام قواعد بيانات مختلفة ومجموعات مختلفة من محولات الميزات. على سبيل المثال ، من المنطقي تضمين موقع أوروبي جميع الميزات المتعلقة بإجمالي الناتج المحلي ، ولكن لا يمكنك القيام بذلك على موقع روسي.

مشاكل في استخدام ميزة التبديل
نظرًا لأنني أعمل في مشروع يتم فيه استخدام ميزة تبديل الميزات بنشاط ، بالإضافة إلى المزايا الواضحة لاستخدامها ، فقد بدأت في ملاحظة المشكلات المرتبطة بها:
- اختبار التعقيد : عند إصدار إصدار جديد ، يختبر مهندسو ضمان الجودة جميع الميزات المضمّنة فيه ، ويحاولون أيضًا تشغيله وإيقاف تشغيله باستخدام محولات الميزات. هذا يتطلب الكثير من الوقت الإضافي ، لأنه من المستحسن اختبار جميع أنواع مجموعات الأعلام
- ظهور الشفرة الميتة : لا تتغير قيم العديد من تبديل الميزات لفترات طويلة من الزمن أو لا تتغير على الإطلاق ، وبالتالي فإن الكود المكتوب بقيمة علامة مختلفة يصبح فعليًا "ميت"
- أعطال غير متوقعة للمواقع : تتمتع العديد من محولات ميزة قديمة بالخاصية المؤسفة المتمثلة في كسر شيء ما عند تغيير قيمته (نظرًا لأن لا أحد تحقق منذ فترة طويلة من أنه يعمل). نظرًا لأنه يتم تخزين محولات المعالم في قاعدة البيانات ويمكن تغييرها بسهولة من قبل مستخدمي الأعمال من لوحة المسؤول ، فغالبًا ما تحدث الأعطال بسبب تغيير في قيمتها. يجب أولاً التحقق من أداء محولات ميزة غير مستخدمة لفترة طويلة في بيئة اختبار
حلول لبعض المشاكل الموصوفة
الإجراءات التالية يمكن أن تساعد في حل المشاكل المذكورة أعلاه:
- توثيق محولات الميزات المتاحة: لفهم ما هو تأثير ميزة تبديل معينة وما هو المفتاح الذي تبحث عنه في قاعدة البيانات ، تحتاج إلى إنشاء وثائق مفصلة مع وصف لجميع محولات الميزات.
- المراجعة الدورية لمحوّلات المعالم: لتجنب ظهور الشفرة الناقصة ، قم بإزالة محولات ميزة قديمة قديمة والكود المرتبط بها
النتائج
أداة
تبديل الميزات هي آلية بسيطة للغاية وفي الوقت نفسه تسمح لك بتجنب ارتكاب أعمال وحشية أو تغيير سلوكيات التطبيق بسهولة أو تجميع العديد من التطبيقات المختلفة على نفس قاعدة الشفرة باستخدام تكوينات تبديل ميزة مختلفة.
ومع ذلك ، تجدر الإشارة إلى أن نمط التطوير هذا يحتوي على بعض العيوب التي تؤدي إلى رمز يصعب قراءته ويصعب الحفاظ عليه ، وبالتالي ، يجب تجنب الاستخدام المفرط لهذا النمط وتوثيق محولات ميزة المستندات ومراجعاتها بشكل دوري لإزالة تلك غير المستخدمة ، ونتيجة لذلك ، مسح المشروع من الكود "الميت".
روابط مفيدة