MVP WinForms

mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:597
0

Witam
Zaczynam uczyć się wzorca MVP w przypadku WinForms. Otrzymałem konkretny przykład programu z tym wzorcem. I w widoku mam zdarzenia kliknięcia myszy na przycisku, takie coś:

Kopiuj
 
  public event EventHandler Save;

  private void saveBt_Click(object sender, EventArgs e)
  {
       if (Save !=null)
                Save(this,EventArgs.Empty);
   }


Czy to jest poprawna konstrukcja ? Chodzi mi o to, że dalej zdarzenie jest w widoku obsłużone. Czy nie mamy możliwości czegoś podobnego do bindingu tylko, że odniesieniu przycisku ? Takie przyporządkowanie zdarzenia do przycisku. Aby nie obsługiwać tego jako kliknięcie myszy i przekazywanie do zdarzenia. Może moje wytłumaczenie nie jest jasne, ale może ktoś domyśli się o co mi chodzi.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
0

Nie wiem o co chodzi, ani o co pytasz, ale w MVP w metodzie obsługującej kliknięcie przycisku powinieneś raczej wywołać metodę Prezentera, a nie rzucać zdarzenie.

mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:8 miesięcy
  • Postów:597
0

W prezenterze mamy metodę, która jest wykonywana poprzez kliknięcie w widoku przycisku. Kod poniżej:

Kopiuj
  protected override void InitializeView()
{
    _view.Save += _view_Save;
}
void _view_Save(object sender, EventArgs e)
{
           // cos tam
}
 

Wiem, że moje pytanie może być niezrozumiałe. Uczę się wzorca MVP, mam kod nie mojego autorstwa. Po prostu chce stwierdzić czy tak powinno to wyglądać.
Pozdrawiam

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:2 dni
  • Lokalizacja:Wrocław
0

Nie widzę sensu w rzucaniu takich zdarzeń z widoków do prezenterów. Zdarzenie kliknięcia w przycisk jest szczegółem implementacji danej technologii GUI, więc nie powinno opuszczać widoku. A prezenter może zawierać normalne metody, które są wołane z widoku.
Zdarzeń można byłoby użyć co najwyżej w drugą stronę, aby np. wyświetlić na widoku informację o postępie/zakończeniu jakiegoś zadania w tle realizowanego przez prezenter.

MA
  • Rejestracja:około 10 lat
  • Ostatnio:3 dni
  • Lokalizacja:Poznań
  • Postów:216
0

Sama konstrukcja nie ma nic do wzorca MVP, jednak istnieje tutaj pewne ryzyko, jeżeli klasa jest używana w kilku wątkach i event Save może być modyfikowany. Powinno to wyglądać tak:

Kopiuj
    var handler = this.Save;
    if (handler != null) handler(this, EventArgs.Empty);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.