수동적 관점에서 이벤트를 구현하는 좋은 방법은 무엇입니까?
-
18-09-2019 - |
문제
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와 컨트롤러 사이의 이벤트에 대한 배선/신경 쓰지 않는 좋은 방법이 있습니다.
제휴하지 않습니다 StackOverflow