Null 객체 패턴의 주된 목표는 사용 가능한 객체가 클라이언트에 제공되는지 확인하는 것입니다. 그래서 우리는이 구현 ... ...Null 객체 패턴 확인 null
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
if (m_A != null) {
m_A.Method();
} else {
// assert or log the error
}
}
다음 코드를 교체하려면 :
void Class::SetPrivateMemberA() {
m_A = GetObject();
}
void Class::UseA() {
m_A.Method();
}
내가 생각하고 문제는 GetObject를()가 여전히 객체를 반환 즉, NULL 객체 또는 기타. 반복적으로 null을 확인하지 않고 다시 전송 된 객체를 사용할 수 있다고 믿는 생각을 좋아하지만 첫 번째 구현에서는 왜 그렇게하지 않겠습니까?
Null Object 패턴의 이점은 코드 정리에 대한 신뢰가 약간 증가했기 때문입니까? 두 번째 구현에서는 A.Method()를 호출하기 전에 null이 아닌지 확인하는 것이 좋습니다.
귀하의 의견에 동의하며 아래 Carl이 동의합니다. 그것은 지나치게 편집증적이고, 코드를 복잡하게 만들고, 코드 리뷰를 늦춘다 고 생각합니다. 문제는 'what-if'인수에 대해 방어합니다 : "무엇인가 '가 생산 중에 발생하면 우리가 null을 확인하지 않았기 때문에 충돌합니다. ? 어떻게 대답하겠습니까? – TERACytE
@TERACyTE : null 상태에 대한 코드 분기를 추가하면 필요하지 않을 때 코드를 추가하면 유지 관리하기가 더 어려워 복잡해집니다. null-checking-for-null이면의 아이디어는 꽤 구분됩니다 디자인에 의한 정규 출현으로 null을 사용하고 더 많은 것을 예외적 인 것으로 취급하는 null 객체 패턴에서. – Tanzelax
(예를 들어 게시물 편집) 아이디어는 여전히 사물이 여전히 null 일 수있는 경우, 여전히 null을 검사 할 필요가 있습니다. 그러나 null을 가능한 ** 소스 **로 가져 오면 코드 브랜치를 유지 관리하기가 더 쉬워집니다. – Tanzelax