Domanda

Sto imparando la vista modello passivo di mantenere la mia applicazione C # WinForms più facile da testare e mantenere.

E ha funzionato bene finora, ma mi chiedo se c'è un modo migliore per implementare Eventi che il modo in cui lo sto facendo ora (e il loro mantenimento verificabili). Questo è quello che sembra (omettendo il codice non rilevanti per questo esempio). fondamentalmente ciò che Sto cercando se è c'è un modo per saltare agganciando gli eventi sia nel presentatore e in forma, io preferirei fare tutto il lavoro nel presentatore.

La mia opinione è simile al seguente:

public interface IApplicationView
{
    event EventHandler Find;
}

Il mio presentatore si presenta così:

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()
    {
        // ...
    }
}

Il mio WinForm appare come:

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;
    }
}

Grazie!

È stato utile?

Soluzione

Un'altra grande risorsa per l'apprendimento MVP con WinForms è Jeremy Millers Costruisci il tuo CAB serie. Ho trovato questo incredibilmente utile quando stavo imparando,

L'articolo sulla Visualizza per Presenter Comunicazione sarà utile a voi; c'è una buona discussione qui sull'uso eventi vs effettuare le chiamate dirette. Ancora meglio, il evento Aggregator articolo presenta un 'meccanismo di pubblicazione / sottoscrizione' che può essere utilizzato al posto di eventi, mantenendo il codice verificabile. Questo è l'approccio che io personalmente preferisco, e hanno avuto buon successo con.

Altri suggerimenti

Scopri questo esempio di come implementare la vista passivo. Ha un buon modo di cablaggio / unwiring per eventi tra la vista e controller che mette la maggior parte del lavoro nel controller.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top