كيف يتم التنسيق في وجهات النظر الطفل أفضل التعامل في MVP؟

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

سؤال

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

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

وإذا رأى التحكم في الأصل هذا مباشرة؟ يبدو كأنني تجاوز نمط MVP عن طريق القيام بذلك.

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

وهنا بعض الزائفة رمز الوضع:

public class ParentView : UserControl, IParentView
{
    private ChildViewOne childViewOne;
    private ChildViewTwo childViewTwo;
    private ParentViewPresenter presenter;

    private RegisterEvents()
    {
        childViewOne.EventOccured += new EventHandler(HandleEvent);
    }

    private void HandleEvent()
    {
        childViewTwo.DoSomething();
    }
}
هل كانت مفيدة؟

المحلول

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

والتعليمات البرمجية الخاصة بك ويمكن بعد ذلك تبدو هذه:

public class ChildViewOne {
    private IEventAggregator evtAggregator;

    public ChildViewOne(IEventAggregator evtAggregator) {
        this.evtAggregator = evtAggregator;
    }

    private void OnEventOccured(){
        evtAggregator.GetEvent<EventOccured>().Publish();
    }
}

publish class ChildViewTwo {
    private IEventAggregator evtAggregator;

    public ChildViewTwo(IEventAggregator evtAggregator) {
     evtAggregator.GetEvent<EventOccured>().Subscribe(OnEventOccured);
    }

    private void OnEventOccured() {
        // Do something here...
    }
}

وتحرير: براين نويس قد استدار مجمع الحدث المنشور إلى WinForms عناصر. التحقق من ذلك هنا، على بلوق

نصائح أخرى

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

وسيكون من الأفضل إذا كنت مسار الحدث طفلك من خلال وجهة نظر الوالدين. كيف حالك انتهاك MVP إذا قمت توجيه الأحداث من خلال وجهة نظر الوالدين؟

وأود أن إنشاء خاصية واجهة IChildView دعا SiblingView (أو شيء أكثر ملاءمة بالنظر إلى سياق الأعمال من التطبيق الخاص بك). لم يكن لديك حتى لإضافة على أنها المعلمة في منشئ، ولكن لديها واجهة تشمل طريقة تسمى SetSiblingView (). هل يمكن أن نسميها من المنشئ. هل يمكن ذلك الحين حدث OnSiblingEventFired ().

ويبدو أقل معقد بالنسبة لي، ولكن ربما أن يكون لمجرد أن يكون عموما كيف وقد اتصلت هذا النوع من المشكلة في الماضي.

ولكن أنا أتفق، من دون معرفة الكثير من التفاصيل وجود رقابة الوالدين لا يبدو أن تكون على غرار النمط MVC.

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