2009-11-05 31 views
6

C# WinForms uygulamasının test ve bakımını daha kolay tutmak için Pasif Görünüm kalıbını öğreniyorum.Pasif Görünüm'de etkinlikleri uygulamak için iyi bir yol nedir?

Şimdiye kadar çok iyi çalıştı, ancak şimdi Olaylarını uygulamak için daha iyi bir yol olup olmadığını merak ediyorum (ve bunları test edilebilir halde tutmak). Bu neye benziyor (kodun atlanması bu örnekle ilgili değil). Temel olarak ne arıyorum Arıyorum olayları hem de sunum yapan ve formda çengel atlamak için bir yol varsa, ben sunum yapan tüm iş yapmayı tercih ederim.

Bence şöyle görünür:

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

Benim sunum şöyle görünür:

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

teşekkür:

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

Benim WinForm gibi görünüyor!

+0

Sana yardım edemem ama sorduğun şeyler ilginç görünüyor. Uygulamayı denediğiniz tekniği açıklayan en sevdiğiniz çevrimiçi kaynağa yönlendirebilir misiniz? –

+0

@Jay - "Model View Presenter" ın hızlı bir Google araması, ihtiyacınız olan tüm bilgileri size vermelidir. – Josh

+0

@Jay Martin Fowler, Passive View tasarım modelini MVP modelinden emekli ve iki yeni haline ayırdığında tasarladı. Pasif Görünüm bunlardan biri olduğunda, bkz. Http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

cevap

3

WinPorms ile MVP öğrenmek için başka bir harika kaynak, Jeremy Millers Build Your Own CAB serisidir. Öğrenirken bu inanılmaz derecede yararlı buldum,

View to Presenter Communication'daki makale size faydalı olacaktır; Olayları kullanmanın yanı sıra doğrudan arama yapmak konusunda iyi bir tartışma var. Daha da iyisi, Event Aggregator makalesi, kodun test edilebilirliğini korurken, olaylar yerine kullanılabilecek bir "yayınlama/abone" mekanizması sunar. Bu kişisel olarak tercih ettiğim ve iyi bir başarıya sahip olduğum yaklaşım.

+0

Etkinlik Toplayıcısı ilginç görünüyor, bu hafta sonu bir göz atacağım ve nasıl göründüğüne bakacağım. – devghost

0

Pasif Görünümün nasıl uygulanacağının bir örneği olan this'a bakın. Denetleyicide çalışmanın çoğunu koyan görünüm ve denetleyici arasındaki olaylar için kablolama/devre dışı bırakmanın iyi bir yoludur.

+0

Hatalı linkler. Hem eski hem de yeni olan. Lütfen SO üzerinde harici bağlantılar yayınlamayın. Hizmetten çıkarılma eğilimindedirler. – Heliac

İlgili konular