Entwickler-Ecke

C# - Die Sprache - View von Logik trennen was gehört zu wem?


dark-destination1988 - Do 11.08.11 16:08
Titel: View von Logik trennen was gehört zu wem?
Moin,
also die Logik von dem View zu trennen ist im Prinzip klar, aber was darf dann noch im View stehen. Ist es Ok, checkbox.IsChecked abzufragen, und je nachdem unterschiedliche Funktionen aufzurufen? Oder ist es Ok ein DataGridView nach der Zuweisung der DataSource im Codebehind zu formatieren(zum Beispiel die Farbe verschiedener Spalten zu ändern oder ähnliches?). Vorher hatte ich mit Silverlight gearbeitet und das hat mit dem MVVM ganz gut geklappt, zurzeit bin ich wieder bei Winforms und stelle mich dieser Frage. Sollte der Codebehind wirklich nur aus dem Aufruf einer Funktion bestehen? Oder ist auch schon ein wenig Logik abarbeitung möglich? Beispielsweise müsste ich das Datagridview in meine Klasse "reinreichen" um diese zu formatieren (jenachdem welcher wert nun drin steht?


bakachan - Do 11.08.11 16:12

Formatieren der Ausgabe gehört eigentlich nicht zu Klassenlogik ist also auf der UI-Ebene richtig angesiedelt.


dark-destination1988 - Do 11.08.11 16:18

und so abarbeitungen wie

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
if(checkbox1.Checked)
{
funktion1();
}
else
{
funktion2();
}


Th69 - Do 11.08.11 16:53

Hallo,

sollte das jetzt eine Frage sein?

Wenn ja, dann lautet die Antwort: it depends ;-)

Wenn die Funktionen wiederum nur zur Logik gehören, könntest du ja auch in der Logik-Klasse eine Methode

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void DoIt(bool bChecked) // in Produktivcode einen sinnvolleren Namen wählen ;-)
{
  if (bChecked)
  {
    funktion1();
  }
  else
  {
    funktion2();
  }
}

anbieten und dann einfach nur in der GUI per

C#-Quelltext
1:
logic.DoIt(checkbox1.Checked);                    

aufrufen.

Ich halte es eigentlich immer so, daß meine GUI-Methoden so klein wie möglich sind.


dark-destination1988 - Fr 12.08.11 07:50

und wie machst du das wenn du anhand von dem rückgabewert mehrere usercontrols setzen musst?
ich würde das in den codebehind machen etwa so

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int ret=obj.FunktionMitRückGabewert()
switch(ret)
{
case 1
//hier setze ich usercontrols
break:
case 2:
//hier setze ich die usercontrols anders als bei 1
break;
case 3
//hier setze ich die user controls wieder anders
break;
}

Ist es den sinnvoll die checkboxen textboxen in eine Klasse zu reichen? Oder sollte man das setzen der Controls im Codebehind "erledigen".
anderes beispiel wäre
der nutzer setzt ein Datum (zum Beispiel Datepicker) ich rufe die Value_changed methode auf in der ich zum beispiel überprüfe ob das datum größer ist als vorgestern. wenn ja dann setze ich das datum auf vorgestern, andern falls bleibt es so, ich finde so eine überprüfung auch nicht sinnvoll in eine separate funktion zu packen, da das mehr codezeilen brauch als ein simples

C#-Quelltext
1:
if(dateTimepicker.Value>(DateTime.Now+new TimeSpan(2,0,0,0)