2009-11-05 4 views
6

C# WinForms 응용 프로그램 을 쉽게 유지 관리하기 위해 수동보기 패턴을 배우고 있습니다.수동보기에서 이벤트를 구현하는 좋은 방법은 무엇입니까?

지금까지 잘 작동했지만 더 나은 방법이 구현되어 있는지 궁금합니다. 이벤트를 지금 수행하고있는 방식 (및 테스트 할 수있는 상태로 유지하는 것)보다 구현하십시오. 이것은 입니다 (이 예제와 관련없는 코드 생략). 기본적으로 무엇 발표자와 양식에서 이벤트를 연결하지 않고 건너 뛸 수있는 방법이 있다면 찾고 있습니다. 발표자의 모든 작업을 선호합니다.

내보기는 다음과 같습니다

public interface IApplicationView 
{ 
    event EventHandler Find; 
} 

내 발표자는 다음과 같습니다

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

감사 :

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의 모습!

+0

나는 당신을 도울 수 없지만 당신이 묻고있는 것은 재미있어 보인다. 구현하려는 기술을 설명하는 가장 좋아하는 온라인 리소스를 알려주십시오. –

+0

@ 제이 - "Model View Presenter"에 대한 Google의 빠른 검색을 통해 필요한 모든 정보를 얻을 수 있습니다. – Josh

+0

@ Jay Martin Fowler는 MVP 패턴을 폐기하고 두 개의 새로운 패턴으로 분리했을 때 패시브 뷰 디자인 패턴을 만들었습니다. 수동보기가 그 중 하나 인 경우 http://martinfowler.com/eaaDev/PassiveScreen.html – devghost

답변

3

WinForms를 사용하여 MVP를 학습하는 또 다른 훌륭한 리소스는 Jeremy Millers Build Your Own CAB 시리즈입니다. 나는 이것을 배울 때 매우 유용하다는 것을 알았습니다.

View to Presenter Communication에 관한 기사는 당신에게 유용 할 것입니다; 직접 전화를 걸거나 이벤트를 사용하는 것에 대한 좋은 토론이 있습니다. 더 나아가 Event Aggregator 기사는 코드를 테스트 가능한 상태로 유지하면서 이벤트 대신 사용할 수있는 "게시/구독"메커니즘을 제공합니다. 이것은 제가 개인적으로 선호하는 접근 방식이며 좋은 성공을 거두었습니다.

+0

Event Aggregator가 흥미있어 보입니다. 이번 주말에 살펴보고 어떻게 바뀌 었는지보십시오. – devghost

0

패시브 뷰를 구현하는 방법에 대한 예제는 this을 확인하십시오. 뷰와 컨트롤러 사이의 이벤트를 와이어 링/와이어 링하는 좋은 방법이있어서 대부분의 작업을 컨트롤러에 넣습니다.

+0

링크가 잘못되었습니다. 낡은 것과 더 새로운 것. SO에 외부 링크를 게시하지 마십시오. 그들은 퇴역하는 경향이 있습니다. – Heliac

관련 문제