في C#، لم يتم تنفيذ نمط المراقب بالفعل باستخدام الأحداث؟

StackOverflow https://stackoverflow.com/questions/32034

  •  09-06-2019
  •  | 
  •  

سؤال

بعد قراءة كتاب أنماط تصميم الرأس الأول واستخدام عدد من أنماط التصميم الأخرى، أحاول فهم نمط المراقب.هل تم تنفيذ هذا بالفعل باستخدام الأحداث في .NET Framework؟

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

المحلول

نعم إنه كذلك.يُطلق على نمط المراقب أيضًا اسم نمط النشر/الاشتراك، وهو بالضبط ما تسمح لك الأحداث بالقيام به.

نصائح أخرى

أود أن أقول نعم، لقد كانت نية Anders Heljsberg هي جعل نمط المراقب ميزة لغوية من الدرجة الأولى مع الأحداث في C#، بناءً على تجربته مع دلفي.يوضح أندرس هذا الأمر ونوايا التصميم الأخرى في مقابلة ممتازة حول راديو هندسة البرمجيات.

نعم، انها متطابقة.

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

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

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

النظر في الفرق:

public void NotifyObservers()
{
    foreach(Product product in ProductList)
    {
        if (product is IProductObserver)
        {
               product.Update(this)
        }
    }
}

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

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

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

مايكروسوفت تنص نفسها على أن استخدام الأحداث والمفوضين هو طريقة c# لتطبيق نمط المراقب.باستخدام بعض اصطلاحات التسمية الأساسية للأحداث والمندوبين، قاموا بتسمية النمط الخاص بهم باسم "نمط الحدث" الذي يفعل نفس الشيء تمامًا ويوفر بعض المزايا الإضافية مقارنة بالكلاسيكية نمط المراقب.

"نمط الحدث" موصوف في مكتبة MSDN داخل "استكشاف نمط تصميم المراقب" شرط.

مرجع مقالة MSDN

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

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

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

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