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

نمط محدد موقع الخدمة هو نمط تصميم يستخدم في تطوير البرمجيات لتغليف العمليات التي ينطوي عليها الحصول على خدمة ذات طبقة تجريد قوية. يستخدم هذا النمط سجلاً مركزيًا يُعرف باسم «محدد الخدمة» "service locator"، والذي يقوم عند الطلب بإرجاع المعلومات اللازمة لأداء مهمة معينة.Inversion of Control Containers and the Dependency Injection pattern  يقول مؤيدو النمط إن هذا النهج يبسط التطبيقات القائمة على المكونات حيث يتم أدراج جميع التبعيات بشكل نظيف في بداية تصميم التطبيق بالكامل، وبالتالي جعل حقن التبعية التقليدية طريقة أكثر تعقيدًا لتوصيل الكائنات. يجادل منتقدو النمط أنه نمط مضاد يحجب التبعيات ويجعل اختبار البرمجيات أصعب.  

 مزايا 

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

 سلبيات 

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

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

المقدمةنمط محدد موقع الخدمة 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''

 انظر أيضًا 

 حقن التبعية

 المراجع 

 روابط خارجية 

 عينة من الرموز
 في الدفاع عن محدد الخدمة 
 أنماط برمجة اللعبة: محدد الخدمة
 التبعيات في التنكر 
 أساطير وحقائق هندسة البرمجيات

تصنيف:نماذج تصميم البرمجيات
تصنيف:برمجة