일반적인 OOP 문제라고 생각하더라도 특히 Java 에서이 문제가 자주 발생합니다. 즉, 예외를 발생 시키면 디자인 문제가 드러납니다.
String name
필드와 필드 가있는 클래스가 있다고 가정하십시오 String surname
.
그런 다음 해당 필드를 사용하여 인보이스와 같은 일종의 문서에 표시하기 위해 사람의 완전한 이름을 작성합니다.
public void String name;
public void String surname;
public String getCompleteName() {return name + " " + surname;}
public void displayCompleteNameOnInvoice() {
String completeName = getCompleteName();
//do something with it....
}
이제 displayCompleteNameOnInvoice
이름을 지정하기 전에 호출 하면 오류가 발생하여 클래스의 동작을 강화하고 싶습니다 . 좋은 생각 같지 않습니까?
getCompleteName
메소드에 예외 발생 코드를 추가 할 수 있습니다 . 그러나 이런 식으로 나는 클래스 사용자와의 '암시 적'계약을 위반하고 있습니다. 일반적으로 게터는 값을 설정하지 않으면 예외를 throw하지 않습니다. 좋아, 이것은 단일 필드를 반환하지 않기 때문에 표준 게터가 아니지만 사용자 관점에서 구별하기가 너무 미묘 할 수 있습니다.
또는 에서 내부에서 예외를 던질 수 있습니다 displayCompleteNameOnInvoice
. 그러나 그렇게하려면 직접 name
또는 surname
필드를 테스트해야하며로 표현하는 추상화를 위반합니다 getCompleteName
. 완전한 이름을 확인하고 작성하는 것은이 방법의 책임입니다. 다른 데이터를 기반으로 한 결정으로 일부 경우에 충분하다고 결정할 수도 surname
있습니다.
그래서 유일한 가능성이 방법의 의미를 변경하는 것 getCompleteName
까지 composeCompleteName
, 그것보다 '적극적인'행동과, 예외를 던지는 능력이 있음을 의미합니다.
이것이 더 나은 디자인 솔루션입니까? 나는 항상 단순성과 정확성 사이의 최상의 균형을 찾고 있습니다. 이 문제에 대한 디자인 참조가 있습니까?
displayCompleteNameOnInvoice
하면 예외를 던질 수 있습니까? getCompleteName
null