Tôi có chức năng kiểm tra giá trị, giống như chức năng kiểm tra số thẻ tín dụng, được truyền trong một chuỗi và cần kiểm tra xem giá trị đó có đúng định dạng không.
Nếu đó là định dạng đúng, nó cần phải trả về đúng.
Nếu đó không phải là định dạng đúng, nó cần trả về false và cũng cho chúng tôi biết giá trị của nó là sai.
Câu hỏi là, cách tốt nhất để đạt được điều này là gì?
Dưới đây là một vài giải pháp:
1. Sử dụng mã trả về số nguyên / enum để biểu thị ý nghĩa:
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];
}
Tôi không thích giải pháp này vì nó đòi hỏi phải thực hiện ở phía người gọi.
2. Tạo một lớp 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();
}
Giải pháp này gọn gàng, nhưng có vẻ như quá mức cần thiết / phát minh lại bánh xe.
3. Sử dụng ngoại lệ.
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();
}
Tôi muốn sử dụng giải pháp này, nhưng tôi nói rằng bạn không nên sử dụng ngoại lệ cho logic kinh doanh.