2017-10-11 6 views
0

당신이 가진 콘솔 응용 프로그램을 말해봐 :클래스 수준 또는 UI 수준에서 사용자 입력 확인을 수행해야합니까?

Main.javaClassA.java

메인 클래스를 사용하면 프로그램을 실행 public static void main(String[] args) 방법을 포함, 그리고 인수 ClassA에 방법에 전화로 사용자 입력을 사용합니다.

ClassA 메서드에 인수를 보내기 전에 main 메서드에 사용자 입력 확인을 입력합니까?

또는

는 성공적으로 입력을 나타내는 여부 메시지를 다시 전달할 것 ClassA 방법에서 사용자 입력 검증을 넣어합니까? 아니면 예외를 던지시겠습니까?

즉, Integer.Parse(...)은 잘못된 입력이 주어진 경우 NumberFormatException이됩니다.

+0

입력이 콘솔 또는 "ClassA"에서 제공되는 그래픽 사용자 인터페이스에서 제공됩니까? 클래스가 사람이라고 상상한다면 ... 누가 그 주장을 "소유 할"것입니까? ClassA를 정확히 동일한 인수를 사용하여 다른 컨텍스트에서 사용한다고 상상할 수 있습니까? ClassA 또는 ClassB 및 ClassC만이 이러한 인수를 사용합니까? – Stefan

+0

@Stefan 입력은 콘솔 (비 그래픽 사용자 인터페이스)에서 나옵니다. – NoName

+0

ClassA는 'main'메소드에서만 사용됩니다. – NoName

답변

1

classA에 의미있는 예외를 넣고 main 메서드가 이러한 예외를 처리 할 방법/방법을 결정하도록 할 수 있습니다. 클래스 A를 다시 사용할 때 새 호출자는 다른 결정을 내릴 수 있습니다.

북 클린 코드 (Robert C. Martin)의 "ErrorHandling"장을 권장합니다. 예를 들어 "정상적인 흐름 정의", "리턴 코드보다는 예외 사용", "비즈니스 로직과 오류 처리 분리"가 있습니다.

경우에 따라 빠른 피드백을받는 것이 중요합니다. 계산이 완료 될 때까지 2 시간을 기다리지 않고 90 %에서 예외를받습니다. 다른 경우에는 자세한 피드백을받는 것이 더 중요합니다. 참조 Data validation: fail fast, fail early vs. complete validation

코드를 읽고 정상적인 흐름을 쉽게 이해할 수 있는지 확인하십시오. 각 함수는 추상화의 한 수준/모델을 한 가지만 수행해야합니다. 예외 처리는 한 수준의 추상화입니다.

+0

감사합니다. 입력 값이 클래스 메소드에 전달할 올바른 데이터 유형 (예 : 신용 카드 번호는 실제로 숫자)에 있는지 확인하기 위해 UI 레벨에서 결정했습니다. 그리고 클래스 메소드에서 비즈니스 로직 (즉, 신용 카드 번호가 실제로 신용 카드 번호인지 여부)을 검증합니다. – NoName

+0

Mabe commons cli가 관심있어 : http://commons.apache.org/proper/commons-cli/ 명령 줄 인수를 구문 분석하기위한 추가 옵션 : https://stackoverflow.com/questions/367706/how-to- parse-command-line-arguments-in-java – Stefan