في بعض الأحيان أثناء عملية التطوير ، سنجد أن الواجهات المطلوبة من قبل العميل والواجهات المقدمة غير متوافقة. لا يمكننا تعديل واجهة العميل لأسباب خاصة. في هذه الحالة ، نحتاج إلى التكيف مع الواجهات الموجودة والفئات غير المتوافقة ، والتي تتطلب وضع المحول. مع المحولات ، يمكننا استخدامها دون تعديل الكود القديم ، وهو قدرة المحول.
يمكن استخدام وضع التكيف للتكيف بين واجهة موجودة وفئة غير متوافقة. تسمى الكائنات التي تستخدم هذا الوضع أيضًا مغلفة لأنها تلتف كائن آخر بواجهة جديدة.
على السطح ، يشبه وضع المحول إلى حد كبير وضع المظهر. إنهم جميعًا بحاجة إلى لف كائنات أخرى وتغيير الواجهات التي يقدمونها. الفرق بين الاثنين هو كيفية تغيير الواجهة. يقدم عنصر المظهر واجهة مبسطة لا توفر خيارات إضافية ، وأحيانًا تجعل بعض الافتراضات لتسهيل المهام الشائعة. يقوم المحول بتحويل واجهة إلى أخرى ، والتي لن تقوم بتصفية إمكانيات معينة ولن يقوم بتبسيط الواجهة. إذا لم يكن واجهة برمجة تطبيقات نظام العميل متوفرة ، فسيكون هناك حاجة إلى محول.
النظرية الأساسية
وضع المحول: تحويل واجهة إلى واجهة يتطلبها العميل دون تعديل رمز العميل ، بحيث يمكن أن تعمل الكود غير المتوافق معًا.
يتكون المحول بشكل أساسي من 3 أدوار:
(1) العميل: الفئة التي تسمي الواجهة
(2) المحول: فئة تستخدم لتوصيل واجهة العميل والواجهة التي تقدم الخدمات
(3) المحول: يوفر الخدمات ، ولكن لا يتوافق مع متطلبات واجهة العميل.
تنفيذ وضع المحول
1. أسهل محول
وضع المحول ليس معقدًا كما تعتقد ، لذلك دعونا نقدم لك أبسط مثال.
يدعو العميل طريقة لحساب الإضافة:
var result = add (1،2) ؛
ومع ذلك ، لم نقدم طريقة إضافة ، ونوفر طريقة SUM بنفس الوظيفة المماثلة:
وظيفة SUM (V1 ، V2) {return v1 + v2 ؛}لتجنب تعديل العميل والخادم ، نضيف وظيفة غلاف:
وظيفة إضافة (v1 ، v2) {reutrn sum (v1 ، v2) ؛}هذا هو أبسط وضع محول ، نضيف طريقة غلاف بين واجهتين غير متوافقين ، ونستخدم هذه الطريقة لتوصيل الاثنين لجعلهما يعملان معًا.
2. التطبيق العملي
من خلال تطوير أطر العمل الأمامية ، بدأ المزيد والمزيد من المطورين في استخدام إطار MVVM للتنمية ، فقط يحتاجون إلى معالجة البيانات دون عناصر DOM ، و jQuery له تأثير أقل وأقل. لا تزال العديد من المشاريع تشير إلى فئة أدوات مكتبة JQuery ، لأننا نحتاج إلى استخدام Ajax المقدمة من JQuery لطلب البيانات إلى الخادم. إذا تم استخدام دور JQuery في المشروع فقط كمكتبة Ajax Tool ، فهذا يبدو وكأنه يشبه إلى حد ما قتل الدجاج والتسبب في مضيعة للموارد. في هذا الوقت ، يمكننا تغليف مكتبة Ajax الخاصة بنا تمامًا.
لنفترض أن Ajax الذي نقوم بتغليفه يستخدم من خلال وظيفة:
ajax ({url: '/getData' ، type: 'post' ، datatype: 'json' ، data: {id: "123"}}). تم (function () {})باستثناء الفرق بين استدعاء واجهة Ajax و jQuery's $ .ajax ، والبعض الآخر هو نفسه بالضبط.
يجب أن يكون هناك العديد من الأماكن في المشروع التي تطلب AJAX. عندما نستبدل jQuery ، لا يمكننا تعديل $ .ajax واحدًا تلو الآخر. ماذا يجب أن نفعل؟ في هذا الوقت ، يمكننا إضافة محول:
var $ = {ajax: function (Options) {return ajax (Options) ؛ }}سيكون هذا متوافقًا مع التعليمات البرمجية القديمة والواجهات الجديدة ، وتجنب التعديلات على التعليمات البرمجية الحالية.
لخص
مبدأ وضع المحول بسيط للغاية ، وهو إضافة فئة غلاف جديدة لالتفاف الواجهة الجديدة للتكيف مع مكالمات الكود القديم ، وتجنب تعديل الواجهة واتصال الرمز.
السيناريوهات المعمول بها: هناك العديد من مكالمات الكود واجهات قديمة. لتجنب تعديل الكود القديم واستبدال واجهات جديدة ، لا تؤثر سيناريوهات التطبيق على طرق التنفيذ الحالية.
1. المناسبات المعمول بها لوضع المحول:
المحولات مناسبة للمواقف التي لا تتوافق فيها الواجهات التي يتوقعها نظام العملاء مع تلك التي توفرها واجهة برمجة التطبيقات الحالية. يجب أن تؤدي الطريقتان المتكيفان إلى المحول مهام مماثلة ، وإلا فلن يتم حل المشكلة. تمامًا مثل عناصر الجسر وعناصر المظهر ، من خلال إنشاء محولات ، يمكن عزل التجريد عن تطبيقاتها بحيث يمكن تغيير الاثنين بشكل مستقل.
2. فوائد وضع المحول:
لف واجهة فئة موجودة مع واجهة جديدة حتى يتمكن برنامج العميل من استخدام هذه الفئة غير مصممة بدون جراحة كبيرة.
3. عيوب وضع Orchestrator:
يعتقد بعض الناس أن المحولات هي النفقات العامة غير الضرورية التي يمكن تجنبها بالكامل عن طريق إعادة كتابة التعليمات البرمجية الحالية. بالإضافة إلى ذلك ، سيقدم وضع المحول أيضًا مجموعة من الأدوات الجديدة التي يجب دعمها. إذا لم يتم تشكيل واجهة برمجة التطبيقات الحالية بعد ، أو لم يتم تشكيل الواجهة الجديدة بعد ، فقد لا يعمل المحول دائمًا.
تميل مزاياها إلى أن تبرز أكثر من عيوبها عندما تتضمن أنظمة كبيرة وأطر إرثية.