كيفية استدعاء الإجراءات من الإجراءات الأخرى؟ (إذا كان هذا حكيما على الإطلاق)

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

سؤال

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

الآن لدي فصل يسمى ImportExport الذي يتعامل مع حالة النموذج الأساسي ثم يعرض حوارات المستخدم المناسبة. ImportExport لديه وظائف save(), saveAs() و open(). وبعد عندما ينقر المستخدم على عنصر القائمة "فتح"، يستدعي مستمع الإجراء open(), open() الفحص الأول إذا كان النموذج يحتوي على تغييرات وإذا كان هذا هو الحال يعرض حوارا يسأل المستخدم إذا أراد حفظه أولا. الآن إذا نقر المستخدم "نعم" open() المكالمات save() الذي يؤدي مرة أخرى بعض الشيكات وعرض مربعات حوار المستخدم. save() مستمر للغاية: الطريقة الوحيدة للخروج من هذا الإجراء هي إما عن طريق التوفير بنجاح أو يقرر المستخدم أنه يريد الإلغاء. أعتمد بقوة على ردود الفعل save() يوفر وإذا كان المستخدم يريد إلغاؤا أيضا بإلغاء المكالمات open() وظيفة.

أردت تقسيم ImportExport فئة إلى ثلاث فصول (OpenAction, SaveAction & SaveAsAction)، كل واحد منهم الفرعية AbstractAction وفي النهاية تخلص من ImportExport صف دراسي. وهذا هو المكان الذي تنشأ فيه مشكلتي: كيف أقول SaveAction لتنفيذ ما إذا كان المستخدم يريد حفظ النموذج قبل فتح واحد آخر؟ وكيف يمكنني الحصول على ردود الفعل إذا قرر المستخدم إلغاء؟

هل هذا حتى النهج الصحيح؟ لا أحب التعليمات البرمجية المكررة في الإجراءات الحفظ المفتوحة، وقد وضعت بالفعل أكبر قدر ممكن من الوظائف في النموذج الأساسي، لكن مربعات حوار المستخدم بوضوح خارج المكان هناك حتى لا يوجد خيار. كنت Action مصممة على الإطلاق لعقد هذا النوع من الوظائف أو يجب أن أبقي بلدي ImportExport فئة وبما ببساطة تفويض جميع دعوات العمل إلى الوظائف المناسبة في ImportExport. وبعد كيف تستخدم Actions?

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

المحلول

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

نصائح أخرى

سأخلق ImportExportController فئة، وجود هذه الأساليب: open, save, saveAs. وبعد ستعرف وحدة التحكم هذه منطق الأعمال.

لي Action لن تحتوي الفصول الدراسية على الكثير من المنطق التجاري. سوف يسمون فقط وحدة التحكم.

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

لي، Actions هل فصول موجهة نحو واجهة المستخدم الرسومية، وتستخدم للراحة (وهي مريحة للغاية!)، ولكن لا توجد فصول مخصصة للتعامل مع منطق الأعمال.

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