winforms - tutorial - patron mvp c#
MVP ComunicaciĆ³n entre los presentadores? (2)
El patrón en sí mismo realmente no prescribe cómo manejar esto.
Mi preferencia es un centro de mensajes / eventos donde los presentadores pueden registrar interés en ciertos eventos. Evita árboles de dependencia complejos y mantiene a los presentadores a prueba.
Por ejemplo:
class PresenterA
{
void HandleProductSelectionChanged(int productId)
{
EventHub.Publish(EventType.ProductChanged, productId);
}
}
class PresenterB
{
void PresenterB
{
EventHub.Register(EventType.ProductChanged, HandleProductChanged);
}
public void HandleProductChanged(object state)
{
var productId = (int)state;
var productDetails = LoadProductDetails(productId);
view.DisplayProductDetails(productDetails);
}
}
EventHub mantendría una lista de suscriptores a invocar para cada tipo de evento.
Usted conserva su HandleProductChanged
de HandleProductChanged
: simplemente llame a HandleProductChanged
para ver cómo respondería PresenterB a una nueva selección de productos.
La única desventaja (como con cualquier patrón) es que introduce un nivel de indirección. Si PresenterA invocó directamente PresenterB, o PresenterB escuchó un evento en PresenterA, es obvio lo que va a suceder inmediatamente.
En este enfoque, tendría el paso adicional de ver EventType.ProductChanged, y luego encontrar qué presentadores mostraron interés en ese evento.
En mi propia experiencia, ese único nivel de indirección vale la pena modularidad que obtienes.
Tengo una pregunta sobre cómo manejar la comunicación entre los presentadores al usar MVP. Digamos que tengo dos MVP-tríadas. Una es una lista de productos (Tríada A) y la otra es información general sobre el producto seleccionado actualmente (Tríada B).
¿Cómo le digo al Presentador B que necesita actualizar porque el producto seleccionado ha cambiado por A? Por supuesto, puedo pensar en formas de hacerlo, pero me preguntaba si existe una convención general sobre cómo manejar esto.
Gracias de antemano por cualquier idea!
Personalmente, no estoy de acuerdo con la forma en que muchas personas eligen el autobús de eventos para resolver este tipo de problemas
Es difícil para mí imaginar un caso en el que dos presentadores necesiten comunicarse entre sí, ¿pueden proporcionar un caso real?
En mi opinión, si dos presentadores necesitan comunicarse entre sí, debe fusionar estos dos en un solo presentador. Recuerde que también la comunicación de los objetos de los modelos entre dos casos de uso es lógica de negocios, por lo que tal vez el alcance del presentador sea mayor de lo que pensaba inicialmente.
Considere también que si usa colaboradores de la manera correcta, entonces no necesita comunicación entre los presentadores. Los datos deben ser proporcionados por los colaboradores.