ฉันมีฟังก์ชั่นตรวจสอบค่าบางอย่างคล้ายกับฟังก์ชั่นตรวจสอบหมายเลขบัตรเครดิตที่ส่งผ่านมาในสตริงและต้องตรวจสอบว่าค่าเป็นรูปแบบที่ถูกต้อง
หากเป็นรูปแบบที่ถูกต้องจะต้องส่งคืนจริง
หากไม่ใช่รูปแบบที่ถูกต้องจะต้องส่งคืนค่าเท็จและแจ้งให้เราทราบว่ามีอะไรผิดปกติกับมูลค่า
คำถามคือวิธีที่ดีที่สุดในการบรรลุเป้าหมายนี้คืออะไร
นี่คือวิธีแก้ปัญหาบางประการ:
1. ใช้รหัสส่งคืนจำนวนเต็ม / enum เพื่อแสดงความหมาย:
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];
}
ฉันไม่ชอบวิธีแก้ปัญหานี้เพราะมันต้องมีการติดตั้งในส่วนของผู้โทร
2. สร้างคลาส returnCode
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();
}
วิธีนี้เป็นระเบียบเรียบร้อย แต่ดูเหมือนว่า overkill / reinventing ล้อ
3. ใช้ข้อยกเว้น
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();
}
ฉันถูกล่อลวงให้ใช้โซลูชันนี้ แต่ฉันบอกว่าคุณไม่ควรใช้ข้อยกเว้นสำหรับตรรกะทางธุรกิจ