Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Design Patterns
Code

أنماط التصاميم. نمط الأمر

by
Difficulty:IntermediateLength:ShortLanguages:
This post is part of a series called Design Patterns in PHP.
Design Patterns: The Simple Factory Pattern
Design Patterns: The Observer Pattern

Arabic (العربية/عربي) translation by Lamis Beirkdar (you can also view the original English article)

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

في هذه المقالة شو نقوم بالتعرف على نمط الأمر. الإسم بشكل عام يعرف نفسه, هذا النمط يساعد على تنفيد أوامر مختلفة. التعريف لهذا النمط بالويكبيديا هو كالتالي:

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

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

المُستقْبٍل Receiver :

وهو الصف الأساسي, بمعنى آخر , هو الكود الأساسي أو مايعرف بال actual implementation وهو عبارة عن مجموعة أوامر يقوم الصف بتنفيذها. يمكن أيضا الحفاظ على الأوامر التي تم تنفيذها, ولكن هذه المهمة ليست جزء من نموذج الأمر لذلك سوف نتحدث عنها لاحقا في مقالة النموذج التذكاري.

الأمر Command :

هذا العنصر هو عبارة عن عدة صفوف (صف لكل أمر) وهو يحتوي على المعلومات اللازمة لتنفيذ الحدث (الأمر) الخاص به. كل صف من هذه الصفوف يقوم بإستدعاء الميثود المطلوبة منه من المستقبل receiver. مايميز هذه الصفوف هي إنها جميعها تقوم بوراثة واجهة radioCommand بحيث تقوم بتغليف كل أمر من أوامر المستقبل ضمن ميثود موحدة في هذه الصفوف execute.

الزبون Client :

هذا العنصر يتصرف تماما كالزبون (يتخذ قرار ما سيقوم بفعله). يختار عنصر الزبون الأمر الذي يريد أن ينفذه ويسنده لمتحول. هذا العنصر لايكترث بمن سيقوم تنفيذ هذا الأمر, ولا بكيفيه تنفيذه. في هذا المثال قمت بإتخاذ الأمر وإسناده كقيمة ثابتة hard-coded . ولكن القيمة ممكن أن تكون بإي شكل , ممكن أن يتم أخذها من فورم تعبئة POST أو من أي URL.

المستدعي Invoker :

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

عند تنفيد الكود السابق سوف نلاحظ بأن الخرج هو "Turning Off Radio" . طبعا لأن الزبون هو الذي حدد هذا الأمر في الفقرة السابقة. الآن نستطيع تنفيذ أوامر اُخرى بنفس الطريقة. إذا كان الزبون حدد الحدث ك turnOnRadio. سيكون الخرج "Turning On Radio". الموضوع بهذه البساطة!

جمع النتيجة ككل:

دعونا نجمع جميع العناصر في مكان واحد لنرى كيف يتم تنفيذ نموذج الأمر.

إضافة أوامر جديدة :

قبل قليل كان لدينا فقط تردد واحد للراديو الخاص بنا, لذلك اكتفينا بإطفائه وتشغيله. لكن دعونا نتخيل مع مرور الوقت أنه قد اصبح لدينا عدة ترددات , نحن الآن بحاجة إلى ميثودات إضافية tuneUp و tuneDown لنرى كيف سوف نقوم بإضافة هذه الأوامر.

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

إضافة أمر جديد يتطلب التعديل في مكانين.الأمر الأول هو أن نقوم بإضافة الميثود الجديدة الخاصة بالأمر المطلوب في التطبيق والتي تحتوي المنطق الخاص بالأمر , بمعنى آخر يجب إضافة التطبيق للميثود في عنصر المستقبل. أما الامر الثاني فهو إنشاء صف جديد لإستدعاء الميثود السابقة (وهو صف في عنصر الأمر كما سميناه سابقا) ويجب لهذا الصف ان يقوم بوراثة الواجهة radioCommand وإستدعاء الميثود الموجودة في عنصر المستقبل.

الأوامر الجديدة

التعديل على ترميز (كود) المُستقْبِل Receiver :

سوف نقوم بإضافة ميثودين جديدتين على صف المُستقْبٍل

النتيجة :

يجب علينا إستخدام نموذج الأمر عندما يكون لدينا أوامر متعددة نريد تنفيذها, ولا يهم إن كانت هذه الأوامر مترابطة أم لا. أخيراً أود أن اقول أنني حاولت ما بوسعي إلى تفصيل هذا النمط التصميمي أتمنى أن تعم الفائدة. يمكنكم أن تقومو بوضع تعليق لمعرفة أرائكم.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.