내 프로그램의 한 부분은 처리를 위해 데이터베이스의 많은 테이블과 열에서 데이터를 가져옵니다. 일부 열은 null
이지만 현재 처리 컨텍스트에서 오류 일 수 있습니다.
이것은 "이론적으로"일어나지 않아야하는데, 그렇게된다면 그것이 나쁜 데이터 나 코드의 버그를 가리 킵니다. 어떤 필드가 어떤지에 따라 오류의 심각도가 다릅니다 null
. 즉, 일부 필드의 경우 처리를 중지하고 누군가에게 통지해야합니다. 다른 필드의 경우 처리를 계속하고 누군가에게 알리는 것이 허용되어야합니다.
드물지만 가능한 null
항목 을 처리하기위한 좋은 아키텍처 또는 디자인 원칙이 있습니까?
솔루션은 Java로 구현할 수 있어야하지만 문제는 언어에 구애받지 않는다고 생각하기 때문에 태그를 사용하지 않았습니다.
내가 가진 생각은 다음과 같습니다.
NOT NULL 사용
데이터베이스에서 NOT NULL 제약 조건을 사용하는 것이 가장 쉽습니다.
그러나 데이터의 원래 삽입이 나중에 처리 단계보다 더 중요하다면 어떻게해야합니까? 따라서 삽입 null
으로 인해 버그로 인해 또는 유효한 이유 가있는 경우 테이블에 삽입하는 경우 삽입이 실패하지 않기를 원합니다. 프로그램의 더 많은 부분이 삽입 된 데이터에 의존하지만이 특정 열에는 의존하지 않는다고 가정 해 봅시다. 따라서 삽입 단계 대신 현재 처리 단계에서 오류가 발생할 위험이 있습니다. 그래서 NOT NULL 제약 조건을 사용하고 싶지 않습니다.
NullPointerException에 따라 순진하게
데이터가 항상있을 것으로 예상되는 것처럼 데이터를 사용하고 (실제로 사실이어야 함) 적절한 수준에서 결과 NPE를 포착 할 수 있습니다 (예 : 현재 항목의 처리가 중지되지만 전체 처리 진행이 아님) ). 이것이 "실패"원칙이며 나는 종종 그것을 선호합니다. 그것이 버그라면 적어도 NPE를 기록합니다.
그러나 다양한 종류의 누락 된 데이터를 구별 할 수있는 능력을 잃었습니다. 예를 들어 누락 된 데이터의 경우 데이터를 남겨 둘 수 있지만 다른 데이터의 경우 처리를 중지하고 관리자에게 알려야합니다.
null
각 액세스 전에 확인 및 사용자 정의 예외 발생
커스텀 예외는 예외를 기반으로 올바른 조치를 결정할 수 있도록 해줄 것 같습니다.
하지만 어딘가에서 확인하는 것을 잊어 버린 경우 어떻게해야합니까? 또한 null 검사로 코드를 혼란스럽게 만들지 않습니다.
이 방법으로 선택하면 어떤 패턴이 접근 방식에 가장 적합합니까?
내 접근 방식에 대한 생각과 의견을 환영합니다. 또한 모든 종류의 더 나은 솔루션 (패턴, 원리, 코드 또는 모델의 더 나은 아키텍처 등).
편집하다:
ORM을 사용하여 DB에서 지속성 객체로의 매핑을 수행한다는 점에서 또 다른 제약이 있습니다. 따라서 해당 수준에서 null 검사를 수행하면 작동하지 않습니다 (null이 해를 끼치 지 않는 부분에서 동일한 객체가 사용되기 때문에) . 지금까지 제공된 답변 이이 옵션을 언급했기 때문에 이것을 추가했습니다.