كيفية استدعاء الإجراءات من الإجراءات الأخرى؟ (إذا كان هذا حكيما على الإطلاق)
-
18-09-2019 - |
سؤال
أنا على وشك إعادة تكوين تطبيق تأرجح من استخدام 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
هل فصول موجهة نحو واجهة المستخدم الرسومية، وتستخدم للراحة (وهي مريحة للغاية!)، ولكن لا توجد فصول مخصصة للتعامل مع منطق الأعمال.