2009-11-05 9 views
6

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!

+0

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? –

+0

@ Jay - Una rapida ricerca su Google di "Model View Presenter" dovrebbe darti tutte le informazioni di cui hai bisogno. – Josh

+0

@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

risposta

3

Un'altra grande risorsa per l'apprendimento di MVP con WinForms è la serie Build Your Own CAB di Jeremy Millers. Ho trovato questo incredibilmente utile quando stavo imparando,

L'articolo su View to Presenter Communication ti sarà utile; c'è una buona discussione qui su come usare gli eventi e fare chiamate dirette. Ancora meglio, l'articolo Event Aggregator presenta un meccanismo di "pubblicazione/sottoscrizione" che può essere utilizzato al posto degli eventi, pur mantenendo il codice verificabile. Questo è l'approccio che personalmente preferisco e con cui ho avuto un buon successo.

+0

L'aggregatore di eventi sembra interessante, lo guarderò questo fine settimana e vedrò come andrà a finire. – devghost

0

Scopri this esempio di come implementare la Vista passiva. Ha un buon modo di cablaggio/unwiring per eventi tra la vista e il controller che mette gran parte del lavoro nel controller.

+0

Collegamenti errati. Sia il vecchio che il più nuovo. Si prega di non pubblicare link esterni su SO. Tendono ad essere smantellati. – Heliac

Problemi correlati