Ist das mehrzeilige if-Anweisung zu Komplex?
Ich bin Validierung von Eingaben in einem Formular und dem Versuch, den Benutzer auffordern, die von unsachgemäßer Eingang(s) basiert auf der Kombination von Steuerelementen verwendet.
Zum Beispiel, ich habe 2 Kombinationsfelder und 3 Textfelder. Die 2 combo-Boxen müssen immer einen anderen Wert als die erste (standardmäßige) Wert, aber eine von drei oder zwei von drei oder alle Textfelder gefüllt werden kann, um die form gültig.
In einem solchen Szenario, ich habe einen 6-Zeile if-Anweisung, um zu versuchen, um den test problemlos lesbar ist:
if ((!String.Equals(ComboBoxA.SelectedValue.ToString(), DEFAULT_COMBO_A_CHOICE.ToString())
&& !String.IsNullOrEmpty(TextBoxA.Text)
&& !String.Equals(ComboBoxB.SelectedValue.ToString(), DEFAULT_COMBO_B_CHOICE.ToString()))
||
(!String.IsNullOrEmpty(TextBoxB.Text)
|| !String.IsNullOrEmpty(TextBoxC.Text)))
{
//Do Some Validation
}
Ich habe 2 Fragen:
-
Sollte diese Art von wenn Aussage unter allen Umständen vermieden werden?
-
Wäre es besser zu umschließen, dieser test mit einer anderen Methode? (Dies würde eine gute Wahl sein, diese überprüfung geschieht in mehr als einem Szenario)
Dank für euren input(s)!
- Es schlägt kondensierend es in einer Zeile.
- Wahrscheinlich off-topic: ich bevorzuge normalerweise
TextBoxA.Text.Trim()
zu gewährleisten zufälligen eingegeben, Leerzeichen zählen nicht. - Keim, ich mache diese tests verwenden, Ihre nicht off-topic, wollte nur nicht, gehören Sie hier, da war ich zu schreiben versucht, die Frage schnell.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem Fall ich finde, es hilft, sich zu bewegen einige der Logik der if-Anweisung, und in einigen mehr sinnvoll benannte Boolesche Werte. ZB.
Offensichtlich, name der combo-und Textboxen entsprechend Ihren tatsächlichen Inhalt. Wenn jemand hat die Arbeit Ihren Weg durch die Logik-mehrere Monate auf der ganzen Linie, Sie werden es Ihnen danken.
Ich persönlich hätte kein großes Problem mit code wie diesen. (Deinen letzten Satz Klammern unnötig.)
Generell möchte ich zu meinen if-Anweisungen einfacher. Aber alle Ihre Bedingungen sind einfach. Wenn Sie wirklich brauchen, um zu testen, dass viele tests, dann würde ich es behalten wie es ist.
Es ist nicht sehr lesbar, ja. Aber man kann es verkürzen:
könnte auch geschrieben werden als:
Vermute ich DEFAULT_COMBO_A_CHOICE ist schon der string ToString si überflüssig wurde.
auch die Klammer um
sind nicht notwendig.
IMO solche Bedingungen sollten vermieden werden (wenn auch nicht auf allen Kosten). Sie sind sehr schwer zu Lesen pflegen.
Gibt es mehrere Möglichkeiten, das zu tun,
Versuchen und gruppieren Sie die Bedingungen entsprechend zu Verhalten, die Sie darstellen. Zum Beispiel
Diese Weise können Sie auch vermeiden, die Vervielfältigung der Bedingungen in Ihrem Formular.
Zweitens, können Sie die Boolesche Algebra vereinfachen Sie den Ausdruck und die
Verwenden Extrakt-Methode refactoring zu bewegen, Bedingungen, die schwer zu Lesen sind Funktionen, um Doppelarbeit zu vermeiden und machen Sie besser lesbar.
Für ex. Der Zustand
extrahiert werden können, werden in eine Funktion