신용 카드 번호 확인 기능과 비슷한 값 확인 기능이 있는데 문자열로 전달되며 값의 형식이 올바른지 확인해야합니다.
올바른 형식이면 true를 반환해야합니다.
올바른 형식이 아닌 경우 false를 반환해야하며 값에 어떤 문제가 있는지 알려주십시오.
문제는 이것을 달성하는 가장 좋은 방법은 무엇입니까?
몇 가지 해결책이 있습니다.
1. 정수 / 열 리턴 코드를 사용하여 의미를 나타냅니다.
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();
}
이 솔루션은 깔끔하지만 바퀴를 과도하게 사용하거나 다시 만드는 것처럼 보입니다.
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();
}
이 솔루션을 사용하고 싶지만 비즈니스 로직에 예외를 사용해서는 안된다는 말을 들었습니다.