Pergunta

Estou aprendendo o padrão Passive View para manter meu aplicativo C # WinForms mais fácil de testar e manter.

Tem funcionado bem até agora, mas gostaria de saber se existe uma maneira melhor para implementar Eventos do que a maneira que eu estou fazendo isso agora (e mantê-los testável). Isto é o que parece (código omitindo não é relevante para este exemplo). basicamente o que Eu estou procurando, se é que há uma maneira de ignorar ligar eventos tanto no apresentador e na forma, eu preferiria fazer todo o trabalho em que o apresentador.

As minhas view parece com isso:

public interface IApplicationView
{
    event EventHandler Find;
}

As minhas apresentador esta aparência:

public class ApplicationPresenter
{
    private IApplicationView _view;
    private IApplicationDomain _domain;

    public ApplicationPresenter(IApplicationView view) : this(view, new ApplicationDomain()) {}
    public ApplicationPresenter(IApplicationView view, IApplicationDomain domain) {
        _view = view;
        _domain = domain;

        HookupEventHandlersTo(view);
    }

    private void HookupEventHandlersTo(IApplicationView view)
    {
        view.Find += delegate { FindAction(); };
    }

    public void FindAction()
    {
        // ...
    }
}

O meu WinForm se parece com:

public partial class Form1 : Form, IApplicationView
{
    private ApplicationPresenter _presenter;
    public event EventHandler Find = delegate {};

    public Form1()
    {
        InitializeComponent();
        _presenter = new ApplicationPresenter(this);
        HookupEvents();
    }

    private void HookupEvents()
    {
        searchButton.Click += Find;
    }
}

Obrigado!

Foi útil?

Solução

Outro ótimo recurso para aprender MVP com WinForms é Jeremy Millers Construa sua própria série CAB . Achei isso extremamente útil quando eu estava aprendendo,

O artigo sobre Ver para Presenter Comunicação será útil para você; há uma boa discussão aqui sobre o uso de eventos vs fazer chamadas diretas. Mesmo melhor, o agregador Evento artigo apresenta um 'mecanismo de publicação / assinatura' que pode ser usado em vez de eventos, mantendo o testável código. Esta é a abordagem que eu, pessoalmente, prefiro, e tiveram um bom sucesso com.

Outras dicas

Confira neste exemplo de como implementar a exibição passiva. Ele tem uma boa maneira de fiação / unwiring para eventos entre a visão eo controlador que coloca a maioria do trabalho no controlador.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top