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!
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? –
@Jay: una búsqueda rápida en Google de "Model View Presenter" debería brindarle toda la información que necesita. – Josh
@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