Sto imparando il pattern Passive View per mantenere l'applicazione C# WinForms più facile da testare e mantenere.Qual è un buon modo per implementare gli eventi in Passive View?
Ha funzionato bene finora, ma mi chiedo se c'è un modo migliore per implementare gli eventi rispetto al modo in cui lo sto facendo ora (e mantenendoli testabili). Questo è come sembra (omettendo codice non rilevante per questo esempio). Fondamentalmente quello che sto cercando è se c'è un modo per saltare gli eventi di aggancio sia nel presentatore che nel modulo, preferirei fare tutto il lavoro nel presentatore.
mio punto di vista è simile al seguente:
public interface IApplicationView
{
event EventHandler Find;
}
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()
{
// ...
}
}
mio WinForm assomiglia:
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!
Non posso aiutarti ma quello che stai chiedendo sembra interessante. Potresti indicarmi la tua risorsa online preferita che descrive la tecnica che stai tentando di implementare? –
@ Jay - Una rapida ricerca su Google di "Model View Presenter" dovrebbe darti tutte le informazioni di cui hai bisogno. – Josh
@Jay Martin Fowler ha coniato il modello di progettazione Passive View quando ha ritirato il pattern MVP e lo ha diviso in due nuovi. Dove Vista passiva è uno di questi, vedere http://martinfowler.com/eaaDev/PassiveScreen.html – devghost