2009-11-05 2 views
6

Я изучаю пассивный шаблон, чтобы поддерживать мое приложение C# WinForms проще в тестировании и обслуживании.Что такое хороший способ реализации событий в пассивном режиме?

Он работал хорошо до сих пор, но мне интересно, есть ли лучший способ реализовать События, чем я делаю это сейчас (и сохраняя их возможность проверки). Это , как это выглядит (исключая код, не относящийся к этому примеру). В основном то, что Я ищу, если есть способ пропустить подключение событий как в презентаторе , так и в форме, я бы предпочел делать всю работу в презентаторе.

мой взгляд выглядит следующим образом:

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

Мой ведущий выглядит следующим образом:

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

Мой WinForm выглядит следующим образом:

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

Спасибо!

+0

Я не могу вам помочь, но то, о чем вы спрашиваете, выглядит интересным. Не могли бы вы указать мне ваш любимый онлайн-ресурс, который описывает технику, которую вы пытаетесь реализовать? –

+0

@Jay - Быстрый поиск Google в «View Viewer Model View» должен предоставить вам всю необходимую информацию. – Josh

+0

@ Джей Мартин Фаулер придумал шаблон пассивного вида, когда он удалил шаблон MVP и разделил его на два новых. Где Пассивный вид является одним из них, см. Http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

ответ

3

Еще один отличный ресурс для изучения MVP с WinForms - это Джереми Миллерс Build Your Own CAB. Я нашел это невероятно полезным, когда я учился,

Статья на View to Presenter Communication будет вам полезна; есть хорошая дискуссия здесь об использовании событий против прямых вызовов. Еще лучше, статья Event Aggregator представляет механизм «публикации/подписания», который можно использовать вместо событий, сохраняя при этом проверяемый код. Это тот подход, который я лично предпочитаю, и имел хороший успех.

+0

Агрегатор событий выглядит интересным, я посмотрю на него в этот уик-энд и посмотрю, как это получится. – devghost

0

Отъезд this пример того, как реализовать пассивный вид. Он имеет хороший способ подключения/отключения для событий между представлением и контроллером, который выполняет большую часть работы в контроллере.

+0

Плохие ссылки. И старый, и новый. Пожалуйста, не публикуйте внешние ссылки на SO. Они, как правило, выводятся из эксплуатации. – Heliac

Смежные вопросы