سؤال

في تطبيقي، لدي العديد من المكونات التي يجب معرفتها عن بعضها البعض، مثل شريط القوائم وشريط الأدوات اللذين يحتاجان إلى معرفتهما حول الجدول لإضافة المهام أو إزالتها وأيضًا لمعرفة الوظيفة المحددة.

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

نظرًا لأنه يعرف الكثير عن النظام، فهل هذا النوع من الاستخدام يتحمل مسؤولية كبيرة في مكان واحد، أم أن هذا هو الاستخدام الصحيح للنمط؟

هل كانت مفيدة؟

المحلول

عادةً سأستخدم نمط الأمر لشيء مثل هذا:

  1. يقوم المستخدم بالنقر فوق الزر "Foo" الموجود في شريط القائمة، والذي يقوم بتنفيذ الأمر FooButtonClickedCommand.
  2. يقوم FooButtonClickedCommand بكل ما يفترض أن يفعله، ثم يعدل العرض (شريط القوائم، الجداول، إلخ) بشكل مناسب.

لذا فإن أوامرك تعرف جميع مكونات العرض الخاصة بك، ولكن الشيء الوحيد الذي تحتاج مكونات العرض الخاصة بك إلى معرفته هو الأمر الذي يجب تنفيذه عندما يقوم المستخدم بإجراء معين.

نصائح أخرى

سأستخدم طريقة العرض السلبي التي يمكنك القراءة عنها هنا.

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

لاحظ أنه لا يوجد أي شيء خارج واجهة واجهة المستخدم يعرف عن الأزرار وخانات الاختيار وما شابه.يمكنك استخدام الواجهة لتجريد التنفيذ الفعلي.

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

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

ويبدو أفضل من البديل ... ولكن مهلا، أنا متزوج من شقيقة أقل القبيح؛ -)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top