نمط محدد موقع الخدمة

من ويكيبيديا، الموسوعة الحرة

نمط محدد موقع الخدمة(بالإنجليزية: service locator pattern)‏ هو نمط تصميم يستخدم في تطوير البرمجيات لتغليف العمليات التي ينطوي عليها الحصول على خدمة ذات طبقة تجريد قوية. يستخدم هذا النمط سجلاً مركزيًا يُعرف باسم «محدد الخدمة» "service locator"، والذي يقوم عند الطلب بإرجاع المعلومات اللازمة لأداء مهمة معينة.[1] يقول مؤيدو النمط إن هذا النهج يبسط التطبيقات القائمة على المكونات حيث يتم أدراج جميع التبعيات بشكل نظيف في بداية تصميم التطبيق بالكامل، وبالتالي جعل حقن التبعية التقليدية طريقة أكثر تعقيدًا لتوصيل الكائنات. يجادل منتقدو النمط أنه نمط مضاد يحجب التبعيات ويجعل اختبار البرمجيات أصعب.[2]  

مزايا[عدل]

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

سلبيات[عدل]

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

ملحق: مسرد المصطلحات الإنجليزية[عدل]

مَسرد المفردات وفق أقسام المقالة
المقدمة
نمط محدد موقع الخدمة service locator pattern
نمط تصميم design pattern
لتغليف encapsulate
طبقة تجريد قوية strong abstraction layer
سجلاً مركزيًا central registry
"محدد الخدمة" "service locator"
عند الطلب on request
بإرجاع returns
يبسط التطبيقات القائمة على المكونات simplifies component-based applications
ادراج listed
بشكل نظيف cleanly
لتوصيل الكائنات connecting objects
يحجب التبعيات obscures dependencies
رابط linker
وقت التشغيل run-time
إعادة تجميع re-compiling
بشكل انتقائي selectively
السجل registry
العديد من محددات الخدمة المنظمة multiple structured service locators
لوظيفة functionality
اختبار testing
يحدد محدد موقع الخدمة صنف ثابت واحد does not mandate one single static class
واصلاح تكوينات التبعية maintain dependency configurations
أخطاء وقت التشغيل run-time errors
تجميعها compiled
الصنف الملموس concrete Class
و ينتج خطئ make error
مشكلة نشر deployment issue
مشكلة محدد الخدمة Service Locator issue
صنف محدد الخدمة العالمية same global service locator class
لتعيين set
التبعيات المزيفة fake dependencies
حقن أصناف التطبيق injecting application classes
بواجهة تحديد موقع خدمة واحدة single service locator interface
تنفيذ implemented
المحاكي Simulator

انظر أيضًا[عدل]

المراجع[عدل]

  1. ^ Inversion of Control Containers and the Dependency Injection pattern نسخة محفوظة 2020-05-30 على موقع واي باك مشين.
  2. ^ Seemann, Mark. "Service Locator is an Anti-Pattern". blog.ploeh.dk (بالإنجليزية). Archived from the original on 2019-06-27. Retrieved 2017-06-01.

روابط خارجية[عدل]