여기에는 오류가 없지만 비즈니스 규칙 위반이 있다고 생각합니다.
두 가지를 구별하고 싶습니다. 처음에는 예기치 않은 상황 (예 : 데이터베이스 연결 손실과 같은 상황)과 나중에 발생할 가능성이있는 일부 시나리오가 있습니다.
오류의 경우 사용자가 수정할 수 없거나 자세한 정보가 필요하기 때문에 일반적인 방식으로 사용자에게 알리는 것이 좋습니다 (예 : '예기치 않은 오류가 발생했습니다').
반면에 비즈니스 규칙은 사용자가 이해할 수 있으며 수정하기 위해 조치를 취할 수있는 항목입니다 (여기서는 사용자 이름 제약 조건). 따라서 사용자에게이를 알려야합니다.
내가 작업 한 프로젝트에서 예외 유형이 BusinessException
입니다. 우리는 문제가 무엇인지를 나타내는 메시지를 던져 사람이 읽을 수있는 형식으로 렌더링합니다.우리는이 예외를 try-catch하지는 않지만 핸들러를 사용하여 예외를 관리합니다. MVC를 사용하고 있다면, 할 수있는 확장 훅이 있습니다.
다른 유형의 예외의 경우 스택 추적을 어딘가에 (즉 EventViewer) 기록하는 것이 좋지만 사용자에게 세부 정보를 제공하지 않는 것이 좋습니다. 이 경우
, 나는 다음을 수행합니다 :
- 는 사용자가 이름을 사전에 검증 할 수 있도록 버튼 이름 확인 되세요.
- 이름의 유효성을 검사 할 위치는 응용 프로그램의 비즈니스 논리를 갖고 싶은 위치에 따라 다릅니다. DB에서는 저장 프로 시저를 사용하는 접근 방식이지만 EF를 사용하는 경우 이는 데이터 액세스에서 추상화하려는 것입니다. 대신
LINQ
(Context.Users.SingleOrDefault(x => x.Name == name)
과 같은 것을 사용하여이 유효성 검사를 직접 작성하고 null 또는 일부 사용자를 반환하는지 확인할 수 있습니다. 이미 DB 제약 조건이 적용되어 있으므로이 유효성 검사가 필요하지 않다고 생각할 수 있습니다.
- 제약 조건 위반인지 또는 다른 오류인지를 결정하기 위해 SQL 오류 코드를 검사해야하기 때문에 EF에서 예외를 캡처하는 것이 번거로울 수 있습니다. 또한이를 결정할지라도 변환해야합니다. 사용자 친화적 하나에 메시지. 나는 이것이 당신의 결정에 당신이 도움이되기를 바랍니다
!
그런 정답을 찾아 주셔서 감사합니다. 내가 말했듯이 LINQ 유효성 검사를 살펴볼 것입니다. 나는 귀하의 'Business-vs-Internal'오류 지점에 완전히 동의합니다. – sha