Che cosa è un buon modo per implementare gli eventi in Passive View?
-
18-09-2019 - |
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!
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.