Ich habe eine Wertüberprüfungsfunktion, ähnlich einer Funktion zur Überprüfung von Kreditkartennummern, die in einer Zeichenfolge übergeben wird und prüfen muss, ob der Wert das richtige Format hat.
Wenn es das richtige Format ist, muss es true zurückgeben.
Wenn es nicht das richtige Format ist, muss es false zurückgeben und uns mitteilen, was mit dem Wert nicht stimmt.
Die Frage ist, was ist der schönste Weg, dies zu erreichen?
Hier sind einige Lösungen:
1. Verwenden Sie Integer / Enum-Rückkehrcodes, um Bedeutungen zu kennzeichnen:
String[] returnCodeLookup =
[
"Value contains wrong number of characters, should contain 10 characters",
"Value should end with 1",
"Value should be a multiple of 3"
]
private int valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc == 0
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + returnCodeLookup[rc];
}
Diese Lösung gefällt mir nicht, da sie auf der Anruferseite implementiert werden muss.
2. Erstellen Sie eine returnCode-Klasse
Class ReturnCode()
{
private boolean success;
private String message;
public boolean getSuccess()
{
return this.success;
}
public String getMessage()
{
return this.message;
}
}
private ReturnCode valueChecker(String value)
{
/*check value*/
return returnCode;
}
rc = checkValue(valueToBeChecked);
if rc.getSuccess()
{
/*continue as normal*/
}
else
{
print("Invalid value format: ") + rc.getMessage();
}
Diese Lösung ist aufgeräumt, aber es scheint, als würde man das Rad übertreiben / neu erfinden.
3. Verwenden Sie Ausnahmen.
private boolean valueChecker(String value)
{
if int(value)%3 != 0 throw InvalidFormatException("Value should be a multiple of 3";
/*etc*/
return True;
}
try {
rc = checkValue(valueToBeChecked);
}
catch (InvalidFormatException e)
{
print e.toString();
}
Ich bin versucht, diese Lösung zu verwenden, aber mir wurde gesagt, dass Sie keine Ausnahmen für die Geschäftslogik verwenden sollten.