أفضل طريقة لفصل الأعمال التجارية من منطق العرض التقديمي؟

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

سؤال

أريد إنشاء لعبة ستعمل محليا وعقل الإنترنت.

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

هذا يعمل بشكل جيد لرسائل الاستجابة للطلب. ولكن ماذا عن الرسائل التي يرسلها الخادم، حيث لا بد لي من تحديث بعض مكونات واجهة المستخدم الرسومية (أي jlabels)؟

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

هل أنا في المسار الصحيح؟ لأنني أعتقد أنني لست كذلك. أي اقتراحات؟

شكرا لك.

ملاحظة: العميل هو جافا سوينغ بسيط.

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

المحلول

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

وبالطبع، فإنه يحررك للحصول على تصاميم واجهة المستخدم الرسومية المختلفة لبيئات مختلفة.

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

نصائح أخرى

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

لكنني اعتقدت دائما أن الطريقة التي أقترب بها ستكون كسر التطبيق إلى حزم / عرض أو نموذج و / / تحكم. ستكون العلاقات أحادية الاتجاه: / وحدة التحكم تعرف عن كل من / نموذج و / عرض، ولكن لن يستورد أي فئات من / وحدة تحكم أو بعضها البعض.

لن تكون مكونات الطبقة / الرأي jframes أبدا؛ سيكونون دائما JPANEL أو حاوية أخرى مناسبة يمكن أن تتكون معا في جمل الأساسية حسب الحاجة. سيكون لكل منها إشارات إلى واجهات المستمع، وهي تهيئة في منشئين، وسوف تأجيل هذه من أجل التعامل مع الحدث:

public class ExamplePanel extends JPanel implements ActionListener
{
    private JButton button;
    private ActionListener buttonListener;

    public ExamplePanel(ActionListener buttonListener)
    {    
        this.button = new JButton("Do Something");
        this.buttonListener = buttonListener;
        this.button.addListener(this.buttonListener);
    }

    public void actionPerformed(ActionEvent e)
    {
        this.buttonListener.actionPerformed(e);
    }
}

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

سأعترف بأنني لم اتبعها أبدا طوال الطريق.

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

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