سؤال

أقوم بإنشاء تطبيق python وأريد تنفيذه مع وضع MVC في الاعتبار.كنت سأستخدم pubsub لإنجاز هذا ولكنني عثرت على PureMVC.

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

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

المحلول

أفترض أنك تشير إلى com.pypusub الذي أعرف عنه الكثير (أنا المؤلف؛).ومع ذلك لا أعرف الكثير عنها PureMVC لبيثون.

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

  • منحنى التعلم:
    • يعد دمج pypubsub في تطبيقك أمرًا سهلاً:اختر "موضوعات الرسالة"، وطرق ووظائف الاشتراك، وأضف رسائل إرسال لهذه المواضيع.يتم نقل الرسائل إلى الوجهة تلقائيًا.واجهة برمجة التطبيقات "سرعة الانطلاق" صغيرة:لديك pub.subscribe و pub.sendMessage للتعلم وهذا كل شيء.
    • مع PureMVC، عليك أن تتعلم المزيد عن الوسطاء، والأوامر، والوكلاء، وما إلى ذلك.هذه كلها مفاهيم قوية ذات وظائف مهمة سيتعين عليك تعلمها مقدمًا.قد تضطر أيضًا إلى كتابة بعض التطبيقات قبل الانتقال من "معرفة" الغرض منها إلى "فهم" متى/كيفية استخدامها.بالنسبة لتطبيق واحد، قد تكون النفقات العامة تستحق العناء في بعض الأحيان.على الأرجح يستحق كل هذا العناء إذا قمت بإنشاء العديد من التطبيقات التي تستخدم إطار العمل.
  • التأثير على تصميم التطبيق:
    • بيبوبسوب:نمط تصميم المراقب المجهول.
    • بيور إم في سي:النمط المعماري MVC
    • لا توجد فئات لاستخدامها مع pypubsub "الاستخدام القياسي".في الغالب يتعين عليك تصنيف رسائلك إلى موضوعات وتحديد ما تريد تضمينه كبيانات.يمكن أن يتطور هذا بشكل عضوي إلى حد ما:أنت بحاجة إلى مربع حوار جديد، وتحتاج إلى إتاحة بعض من حالته، لذا عند تغيير حقل، تتغير التسمية في مكان آخر:كل ما عليك فعله هو تضمين النشر في مربع الحوار، والاشتراك في الكود الذي يقوم بتحديث التسمية.إذا كان هناك أي شيء، فإن pypubsub يسمح لك بعدم القلق بشأن التصميم؛أو بالأحرى، يسمح لك بتركيز تصميمك على الوظائف بدلاً من كيفية نقل البيانات من مكان إلى آخر.
    • مع PureMVC هناك العديد من الفئات التي يمكنك استخدامها، فهي تتطلب منك تصميم مكوناتك لتشتق منها وتسجيلها وتنفيذ وظائف الفئة الأساسية.ليس من الواضح أنه يمكنك بسهولة نشر البيانات من مكان واحد في تطبيقك والتقاطها في مكان آخر دون إنشاء عدة فئات جديدة وتنفيذها بحيث تفعل الشيء الصحيح عندما يستدعيها إطار العمل.وبطبيعة الحال، فإن النفقات العامة (الوقت اللازم للتصميم) ستكون في بعض الحالات تستحق العناء.
  • إعادة الاستخدام:
    • طالما أن المكون يوثق موضوعات الرسالة التي ينشرها، وما يستمع إليه، فيمكن دمجه في تطبيق آخر، أو وحدة يتم اختبارها من حيث السلوك، وما إلى ذلك.إذا كان التطبيق الآخر لا يستخدم pypubsub، فمن السهل إضافته، وليس هناك أي تأثير على البنية.لا يحتاج كل التطبيق إلى استخدام pubsub، ويمكن استخدامه عند الحاجة فقط.
    • OTOH لا يمكن دمج مكون PureMVC إلا في تطبيق يعتمد بالفعل على PureMVC.
  • قابلية الاختبار:
    • يسهل PureMVC الاختبار عن طريق فصل المخاوف عبر الطبقات:المرئيات والمنطق والبيانات.
    • في حين أن النشر والاشتراك (pypubsub) يسهل ذلك من خلال الفصل بين الناشرين والمستهلكين، بغض النظر عن الطبقة.ومن ثم فإن الاختبار باستخدام pypubsub يتكون من إجراء الاختبار لنشر البيانات التي يستخدمها المكون الخاص بك، والاشتراك في البيانات المنشورة بواسطة المكون الخاص بك.بينما مع PureMVC، يجب أن يتظاهر الاختبار بأنه طبقات مرئية وطبقات بيانات.لا أعرف مدى سهولة ذلك في PureMVC.
    • يمكن أن يصبح من الصعب تصحيح أخطاء كل نظام نشر واشتراك بدون الأدوات المناسبة، بمجرد وصول التطبيق إلى حجم معين:قد يكون من الصعب تتبع مسار الرسائل.يوفر Pypubsub فئات تساعد في هذا (لاستخدامها أثناء التطوير)، ووظيفة تتحقق من توافق الناشرين والمستمعين.
    • يبدو لي بناءً على مخططات PureMVC أن مشكلات مماثلة قد تنشأ:سيتعين عليك تتبع طريقك عبر الوكلاء والأوامر والوسطاء، عبر الواجهات، لمعرفة سبب حدوث خطأ ما.لا أعرف ما هي الأدوات التي توفرها PureMVC للتعامل مع هذا الأمر.
  • غاية:
    • يدور نمط المراقب حول كيفية نقل البيانات من مكان إلى آخر عبر نوع من "ناقل البيانات"؛وطالما يمكن ربط المكونات بالحافلة، يمكن تبادل الحالة دون معرفة المصدر أو الحوض.
    • PureMVC هو نمط معماري:وتتمثل مهمتها في تسهيل وصف تطبيقك فيما يتعلق بمخاوف العرض والتحكم والبيانات.لا يهتم النموذج بكيفية تفاعل عنصر التحكم معه؛التحكم لا يهتم بكيفية عرضه؛لكن العرض يحتاج إلى عنصر تحكم لتوفير خدمات محددة للتعامل مع إجراءات المستخدم والحصول على المجموعة الفرعية المطلوبة من البيانات لعرضها (نظرًا لأنه لا يتم عرض جميع البيانات المتوفرة عادةً)، ويحتاج عنصر التحكم إلى النموذج لتوفير خدمات محددة (للحصول على البيانات، وتغيير عليه، والتحقق من صحته، وحفظه، وما إلى ذلك)، ويحتاج عنصر التحكم إلى إنشاء مثيل لمكونات العرض في الوقت المناسب.
  • استبعاد متبادل:لا يوجد سبب يمكنني التفكير فيه، بناءً على المستندات، يمنع استخدام المكتبتين في نفس التطبيق.إنهم يعملون على مستويات مختلفة، ولهم غرض مختلف، ولا يمكنهم التعايش.

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

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