문제

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

감사!

도움이 되었습니까?

해결책

Winforms와 MVP 학습을위한 또 다른 훌륭한 리소스는 Jeremy Millers입니다. 나만의 택시를 만드십시오 시리즈. 내가 배우고있을 때 이것이 엄청나게 유용하다는 것을 알았습니다.

기사의 기사 발표자 커뮤니케이션을보십시오 당신에게 유용 할 것입니다. 여기에는 이벤트를 사용하는 것에 대한 좋은 토론이 있습니다. 더 나은 이벤트 애그리 게이터 기사는 코드를 테스트 가능하게 유지하면서 이벤트 대신 사용할 수있는 "게시/구독"메커니즘을 제시합니다. 이것은 내가 개인적으로 선호하고 좋은 성공을 거둔 접근법입니다.

다른 팁

체크 아웃 이것 수동적보기를 구현하는 방법의 예. 대부분의 작업을 컨트롤러에 넣는 View와 컨트롤러 사이의 이벤트에 대한 배선/신경 쓰지 않는 좋은 방법이 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top