지난주에 우리는 애플리케이션의 서비스 계층에서 널 처리에 대해 논란의 여지가있었습니다. 질문은 .NET 컨텍스트에 있지만 Java 및 다른 많은 기술에서도 동일합니다.
문제는 : 항상 null을 확인하고 코드가 무엇이든 상관없이 코드를 작동 시키거나 null이 예기치 않게 수신되면 예외가 발생하도록해야합니까?
한쪽에서, null을 확인하지 않으려는 경우 (즉, 처리 할 사용자 인터페이스가 없음) 빈 캐치가있는 try 블록을 작성하는 것과 같습니다. 오류를 숨기고 있습니다. 오류는 코드에서 무언가가 변경되어 null이 이제 예상 값이거나 다른 오류가 있고 잘못된 ID가 메소드에 전달되었을 수 있습니다.
반면, null 확인은 일반적으로 좋은 습관 일 수 있습니다. 또한 검사가 있으면 기능의 일부만 영향을 미치지 않으면 서 응용 프로그램이 계속 작동 할 수 있습니다. 그런 다음 고객은 "페이지 X를 열 수 없음"과 같은 훨씬 더 심각한 버그 대신 "댓글을 삭제할 수 없습니다"와 같은 작은 버그를보고 할 수 있습니다.
어떤 관행을 따르고 있으며 두 가지 접근법에 대한 또는 반대의 주장은 무엇입니까?
최신 정보:
특정 사례에 대한 세부 정보를 추가하고 싶습니다. 우리는 데이터베이스에서 일부 객체를 검색하고 일부 처리를 수행했습니다 (예를 들어 컬렉션을 작성하십시오). 코드를 작성한 개발자는 오브젝트가 널일 수 있다고 예상하지 않았으므로 점검을 포함하지 않았으며 페이지가로드 될 때 오류가 발생하여 전체 페이지가로드되지 않았습니다.
분명히이 경우에는 점검이 필요했습니다. 그런 다음 처리되지 않은 것으로 예상되는 경우에도 처리되는 모든 개체를 검사해야하는지 여부와 최종 처리를 자동으로 중단해야하는지에 대한 논쟁을 벌였습니다.
가상의 이점은 페이지가 계속 작동한다는 것입니다. 서로 다른 그룹 (사용자, 의견, 질문)으로 된 Stack Exchange의 검색 결과를 생각해보십시오. 이 메소드는 널 (null)을 점검하고 사용자 처리를 중단 할 수 있지만 (버그로 인해 널임) "주석"및 "질문"섹션을 리턴합니다. "사용자"섹션이없는 것을 제외하고는 페이지가 계속 작동합니다 (버그). 조기에 실패하여 전체 페이지를 깨거나 계속 작동하여 누군가 "사용자"섹션이 누락되었음을 알릴 때까지 기다려야합니까?
assert(foo != null, "foo is web control within the repeater, there's no reason to expect it to be null, etc, etc...");