2009-11-05 10 views
6

Estoy aprendiendo el patrón de Vista pasiva para mantener mi aplicación C# WinForms más fácil de probar y mantener.¿Cuál es una buena manera de implementar eventos en la vista pasiva?

Funcionó bien hasta el momento, pero me pregunto si existe una forma mejor de implementar los eventos que la forma en que lo estoy haciendo ahora (y mantenerlos comprobables). Esto es lo que parece (omitiendo el código no relevante para este ejemplo). Básicamente, qué estoy buscando si hay una manera de saltear eventos de enganche tanto en el presentador y en el formulario, preferiría hacer todo el trabajo en el presentador.

Mi punto de vista es el siguiente:

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

Mi presentadora se ve así:

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

Mi WinForm parece:

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

Gracias!

+0

No puedo ayudarte pero lo que estás preguntando parece interesante. ¿Podría indicarme su recurso en línea favorito que describe la técnica que está tratando de implementar? –

+0

@Jay: una búsqueda rápida en Google de "Model View Presenter" debería brindarle toda la información que necesita. – Josh

+0

@Jay Martin Fowler acuñó el patrón de diseño de Vista pasiva cuando retiró el patrón de MVP y lo dividió en dos nuevos. Si la vista pasiva es una de ellas, consulte http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

Respuesta

3

Otro gran recurso para aprender MVP con WinForms es Jeremy Millers Build Your Own CAB series. Lo encontré increíblemente útil cuando estaba aprendiendo,

El artículo en View to Presenter Communication te será útil; hay una buena discusión aquí sobre el uso de eventos vs hacer llamadas directas. Aún mejor, el artículo Event Aggregator presenta un mecanismo de "publicar/suscribir" que se puede usar en lugar de eventos, mientras se mantiene el código comprobable. Este es el enfoque que personalmente prefiero y con el que he tenido éxito.

+0

El agregador de eventos se ve interesante, voy a echarle un vistazo este fin de semana y ver cómo resulta. – devghost

0

Consulte this ejemplo de cómo implementar la vista pasiva. Tiene una buena manera de cablear/desconectar para eventos entre la vista y el controlador que pone la mayor parte del trabajo en el controlador.

+0

Enlaces incorrectos. Tanto el anterior como el nuevo. Por favor, no publique enlaces externos en SO. Tienden a ser desmantelados. – Heliac

Cuestiones relacionadas