ما هي بعض الأنماط لإنشاء طرق العرض وأجهزة التحكم في تطبيق MVC أو MVP؟

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

سؤال

أنا أعمل على واجهة المستخدم الرسومية MVC/MVP لتحرير وثيقة. يحتوي المستند على بنية شجرة ، مع بعض العقد التي تمثل النص ، صور أخرى. يتضمن طراز التطبيق أيضًا مكدس أوامر ، حيث تعمل الأوامر مباشرة على النموذج.

نظرًا لأن العقد المختلفة لها عناصر تحكم مختلفة جذريًا ، فإنني أخطط لتنفيذ Trids الفردية MVC/MVP لكل عقدة. حيث أواجه مشكلة هو كيفية مزامنة إنشاء وتدمير مكونات Peer V و C.

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

ما هي بعض الأنماط الشائعة أو أفضل الممارسات لتوليد الرؤية/وحدة التحكم الديناميكية؟

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

المحلول

أوصي بالنظر إلى بعض أنماط واجهة المستخدم في هذا موقع

أما بالنسبة لسؤالك المحدد ، فسأفعل ما يلي

سوف ينفذ النموذج الذي يعرض العقد واجهة inodeview

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

يمكنك إضافة العقدة بطريقة بحيث يوجد حقل على عنصر التحكم الذي يحتوي على المفتاح.

جنبا إلى جنب مع واجهة inodetreeform ، سيكون لديك واجهة inodeview. هذا من شأنه أن يغطي منطقة العرض أو النموذج الجديد الذي ستحوله أيضًا.

عند النقر فوق العقدة ، فإنه يمرر المفتاح إلى Nodetreescreen الذي يميل إلى النظر إلى نوع العقدة. لديها مجموعة من كائنات inodeview. واحدة من خصائص inodeview ستكون أي نوع من العقدة هي.

يمكنك استرداد inodeview الأيمن. يمكنك إغلاق inodeview الحالي ، وتعيين inodeview الحالي على تلك التي استعدتها ، ومررها العقدة ، وأخبرها بعرض نفسها.

لديك خيار حول ما سيتحدثه inodeview. يمكن أن يكون لديك نموذج/عنصر تحكم مسجل لكل نوع من النوع مختلف. على سبيل المثال ، inodeviewtext ، inodeviewImage ، إلخ. أو فقط واحد من inodeviewform ودع الكائن الذي ينفذ inodeview يهتم بالرسم الفعلي.

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

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

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

هذا هو البديل من المنظر السلبي على موقع مارتن فاولر.

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