Pregunta

Supongamos que tiene múltiples tríadas MVP en su aplicación (Windows Forms .NET 2.0 app) y cada aspecto de la tríada después de un área de responsabilidad. ¿Cuál es su forma preferida de coordinar la comunicación entre las tríadas MVP?

Opción 1 Un objeto coordinador que "tiene" cada modelo y se ocupa de la coordinación a través de la suscripción de los eventos necesarios en cada uno y luego decidir qué métodos modelo para llamar en qué escenarios.

La preocupación de que esto puede ser una clase de "dios".

Opción 2 Un presentador "tiene" otro presentador y cuando sucede algo de interés en el modelo, el presentador utiliza la otra presentadora de comunicación mueven a lo largo.

La preocupación de que los presentadores no deben tener una interfaz pública (Presentador-primera aproximación) y que esto rompe.

Me pregunto lo que otras personas han hecho para solucionar este problema de una manera escalable OO. ¿Y si añado otra tríada MVP? ¿Qué tan difícil será para adaptarse a eso en mi coordinador? Debe haber algunos buenos ejemplos de cómo administrar varias tríadas MVP en una aplicación Windows Forms?

¿Fue útil?

Solución

No es por ser vago ... pero depende. Los dos enfoques que he utilizado en el pasado:

  1. Evento agregador patrón, y tienen el individuo presentadores disparan eventos que otros presentadores pueden manejar. p.ej. PresenterA hace: events.Raise<MyEvent> () y PresenterB implementos:. IHandler<MyEvent> y reacciona en consecuencia en su método public void Handle (MyEvent @event)
  2. Usar un modelo compartido que se inyecta en los presentadores que deben ser coordinadas. Por ejemplo, si la selección de las manijas de un presentador de un determinado Foo, y las otras necesidades del presentador para actualizar un panel de datos con detalles Foo, podría utilizar un modelo de estado IFooSelection e inyectar eso en los dos presentadores que necesidad de coordinar el concepto de 'selección actual '.

La interfaz:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top