Chciałbym się dowiedzieć gdzie powinna się znajdować logika GUI w Winforms MVP.
Załóżmy, że mam formę odpowiedzialną za wyświetlanie danych pojazdu. Kontrolki na tej formie powinny być wyszarzone lub aktywne, w zależności od typu pojazdu.
Czy poniższy kod jest jest zgodny z ideą MVP?
Widok:
public interface IView
{
bool TextBox1IsEnabled { get; set; }
bool TextBox2IsEnabled { get; set; }
bool CheckBox1IsChecked { get; set; }
VehicleType VehicleType { get; set; }
}
**
Prezenter:**
public class Presenter
{
private readonly IView view;
public Presenter(IView view)
{
this.view = view;
}
public void ChangeControlVisible()
{
switch (view.VehicleType)
{
case VehicleType.Car:
{
this.view.TextBox1IsEnabled = true;
this.view.TextBox2IsEnabled = true;
this.view.CheckBox1IsChecked = true;
};
break;
case VehicleType.Train:
{
this.view.TextBox1IsEnabled = false;
this.view.TextBox2IsEnabled = false;
this.view.CheckBox1IsChecked = false;
}
break;
case VehicleType.Motobike:
{
this.view.TextBox1IsEnabled = true;
this.view.TextBox2IsEnabled = false;
this.view.CheckBox1IsChecked = true;
}
break;
}
}
}
**
Wywołanie na formie:**
private void CheckBoxFormType_CheckedChanged(object sender, EventArgs e)
{
new Presenter(this).ChangeControlVisible();
}
W podanym przeze mnie przykładzie mogę z łatwością przetestować logikę GUI. Mam natomiast wątpliwości czy widok powinien posiadać takie właściwości jak
TextBox1IsEnabled
, czy CheckBox1IsChecked
.
Będę bardzo wdzięczny za wyjaśnienie. Szczególnie liczę na opinię @somekind, który wklejał na forum przykładową aplikację implementującą MVP, na której starałem się wzorować. Niestety na podstawie w/w aplikacji nie jestem w stanie jednoznacznie ocenić czy podążam w dobrym kierunku :)