Pergunta

Digamos que você tenha várias tríades de MVP em seu aplicativo (aplicativo WinForms .NET 2.0) e cada tríade cuida de uma área de responsabilidade. Qual é a sua maneira preferida de coordenar a comunicação entre as tríades MVP?

Opção 1 Um objeto de coordenador que "possui" cada modelo e cuida da coordenação através da assinatura dos eventos necessários em cada um e depois decidindo quais métodos de modelo chamar em quais cenários.

Preocupado que isso possa ser uma classe "Deus".

Opção 2 Um apresentador "tem" outro apresentador e quando algo de interesse acontece no modelo, o apresentador usa o outro apresentador para mover a comunicação.

Preocupação de que os apresentadores não tenham uma interface pública (abordagem do apresentador primeiro) e isso quebra isso.

Só estou me perguntando o que outras pessoas fizeram para resolver esse problema de maneira escalável de OO. E se eu adicionar outra tríade MVP? Quão difícil será encaixar isso no meu coordenador? Deve haver alguns bons exemplos de como gerenciar várias tríades de MVP em um aplicativo Winforms?

Foi útil?

Solução

Para não ser vago ... mas depende. As duas abordagens que usei no passado:

  1. Use um Agregador de eventos Padrão, e peça aos apresentadores individuais que disparem eventos que outros apresentadores podem suportar. por exemplo, apresenta: events.Raise<MyEvent> () e implementos do apresentador: IHandler<MyEvent> e reage de acordo em seu public void Handle (MyEvent @event) método.
  2. Use um modelo compartilhado que seja injetado nos apresentadores que precisam ser coordenados. Por exemplo, se um apresentador lida com a seleção de um determinado Foo, e o outro apresentador precisará atualizar um painel de detalhes com detalhes, eu posso usar um modelo de estado de seleção e injetar isso em ambos os apresentadores que precisam coordenar o conceito de 'seleção atual '.

A interface:

public interface IFooSelection {
    public event EventHandler Changed;
    Foo Selected { get; set; }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top