Domanda

Diciamo che hanno più triadi MVP nella vostra applicazione (WinForms .NET 2.0 app) e ogni aspetto triade dopo un'area di responsabilità. Qual è il tuo modo preferito di coordinare la comunicazione tra le triadi MVP?

L'opzione 1 Un oggetto coordinatore che "ha" ogni modello e si occupa del coordinamento attraverso la sottoscrizione di eventi necessari a ciascuna e quindi decidere quali metodi modello di chiamare in quali scenari.

La preoccupazione che questo potrebbe essere una classe "Dio".

L'opzione 2 Un presentatore "ha" un altro relatore, e quando qualcosa di interessante accade nel modello, il presentatore utilizza l'altro presentatore di comunicazione si muovono lungo.

La preoccupazione che i presentatori non dovrebbero avere un'interfaccia pubblica (presentatore-primo approccio) e questo si rompe che.

Mi chiedo solo quello che gli altri hanno fatto per risolvere questo problema in un modo OO scalabile. Che cosa succede se aggiungo un'altra triade MVP? Quanto difficile sarà per adattarsi che nel mio coordinatore? Ci devono essere alcuni buoni esempi di come gestire più triadi MVP in un'applicazione WinForms?

È stato utile?

Soluzione

Non per essere vaghi ... ma dipende. I due approcci che ho usato in passato:

  1. Usa un Evento Aggregator modello, e hanno l'individuo presentatori fuoco off eventi che altri presentatori possono gestire. per esempio. Presentera fa: events.Raise<MyEvent> () e PresenterB attrezzi:. IHandler<MyEvent> e reagisce di conseguenza nel suo metodo public void Handle (MyEvent @event)
  2. Utilizza un modello comune che viene iniettato nel presentatori che devono essere coordinate. Ad esempio, se la selezione maniglie uno presentatore di un dato Foo, e le altre necessità presentatore per modificare un pannello particolari con dettagli Foo, posso usare un modello di stato IFooSelection e iniettare che in entrambi i presentatori che necessità di coordinare il concetto di 'selezione corrente '.

L'interfaccia:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top