MVC의 예외 래핑

cmtjk

Java의 MVC 응용 프로그램에 대한 유효한 예외 처리 방법을 찾으려고합니다. 내 프로그래밍 수업에서 모든 클래스 (다이어그램의 오른쪽)에 대해 추가 예외를 작성하는 방법을 배웠지 만 모든 곳에서 다양한 예외 클래스와 try-catch 문 ( 'throw 일찍, 늦게 잡아라 '라는 원칙을 내 생각) 그래서 나는이 접근법 을 내 응용 프로그램 에 적용하려고 노력했습니다 .

내 질문은 아래 표시된 솔루션 (다이어그램의 왼쪽 부분)이 유효한 접근 방식인지 아니면 나중에 실행할 수있는 장애물이 있는지 여부입니다. 모델의 하위 수준에서 발생하는 예외를 래핑하고 변경되지 않은 상태로 컨트롤러에 넘겨 주거나 모델의 최상위 계층에서만 발생하는 모든 예외를 포착 할 수 있습니까?

나는 이것에 대한 정보를 거의 찾지 못했기 때문에 당신이 나에게 몇 가지 의견과 가장 중요한 비판을 줄 수 있기를 바랍니다. 미리 감사드립니다!

래퍼 클래스가있는 MVC에 대한 예외 처리 방법

UPDATE 1 :Model 클래스는 여기에 대부분의 구성

public class Model {

    private MyData someData;
    //some more data

    public String parseFile(file) {
        return Parser.parse(file);
    }

    public Result analyzeData(someData) {
        return Analyzer.analyze(someData);
    }

    //...

}

따라서 일부 데이터 구조를 보유하고 있지만 대부분 FileReader, the Analyzer또는 같은 '서비스'클래스 (?)의 메서드를 호출합니다 Parser. 이러한 클래스는 모두 던져 Exceptions처럼 IOException등을 컨트롤러 내가 사용자가 연락 할 중요한 일에 대해 알고 있어야합니다.

그리고 제 생각에는 실제 Model클래스 (실제로 데이터를 처리하지 않는)는 '서비스'클래스에서 발생하는 예외에 대해 알아야합니다. 이를 처리 할 수있는 컨트롤러에게 넘겨주고 무엇을할지 결정해야합니다.

따라서 내 생각은 이미 발생하는 예외를 래핑하여 Model여기에 있는 클래스가 그것에 대해 걱정할 필요가 없도록하는 것이 었습니다.

가 델라와 함께

내가 여기서 놓친 것은 서비스입니다. 일반적으로 얇은 모델이 있으면 서비스가 무거운 작업을 수행합니다. 하지만 두꺼운 모델은 서비스 없이도 가능합니다.

그럼에도 불구하고 귀하의 질문은 예외에 관한 것입니다. 우선, 여기서 Java를 사용하고 있으므로 Checked 예외입니까? 함수 사용자가 합리적으로 처리 할 것으로 예상 할 수 없다고 생각되면 대부분의 예외는 확인되지 않은 예외 여야 합니다. 당신은 그가 적절한 조치를 취할 수없는 모든 종류의 엣지 케이스로 당신의 객체 사용자에게 부담을주고 싶지 않습니다.

이를 염두에두면 많은 런타임 인식이 남습니다. 컨트롤러는 특정 런타임 감지가 발생할 때 수행 할 작업을 결정해야합니다. 단순히 다른 오류 페이지를 표시하거나 예외를 약간 알고있을 수 있습니다. 컨트롤러에 예외 처리기가있는 것은 괜찮습니다.

예외를 래핑하는 경우 실제로 계층화 된 응용 프로그램이있을 때만 수행해야합니다. 예를 들어 뷰 계층, 비즈니스 계층 및 지속성 계층 (순서대로)이있는 경우 지속성 계층은 고유 한 예외 만 제공해야합니다. 모든 기본 기술 (처리 할 수없는 그 예외 경우 비록 차폐해야 전혀은 이 벌금을 수 있습니다 그것을 통해 누설 수 있도록). 비즈니스 계층과 유사하게 뷰 계층에 대한 지속성 계층 예외를 표시해서는 안됩니다.

기대하거나 원하는 것에 따라 지속성 계층이 catch RuntimeException(e) {throw new PersistanceRuntimeException(e);}유사한 구조를 가질 수 있지만 실제로는 사용자가 이러한 예외를 성공적으로 처리 할 것으로 기대할 수 없으므로 해당 예외가 누출되도록하는 것이 좋습니다. 컨트롤러에서 처리하십시오 catch RuntimeException(e) {showErrorPage();})

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

예외 처리의 루핑

분류에서Dev

클래스의 예외

분류에서Dev

단일 AggregateException에서 ActionBlock의 모든 예외를 래핑하는 방법

분류에서Dev

Hibernate DuplicateImportMapping 예외 : 두 클래스를 하나의 테이블에 매핑

분류에서Dev

div 외부의 Flexbox 래핑 요소

분류에서Dev

MVC null 예외

분류에서Dev

클래스의 junitparameter 예외 객체

분류에서Dev

Python Director 클래스의 Swig 예외

분류에서Dev

C ++의 클래스 및 예외 처리

분류에서Dev

ArrayList의 예외 예?

분류에서Dev

익명 내부 클래스 예제의 예외

분류에서Dev

기본 테이블 디자인의 외래 키 제약 예외

분류에서Dev

외래 키 매핑

분류에서Dev

if 문의 예외

분류에서Dev

.htaccess의 예외

분류에서Dev

NHibernate 매핑 예외 : 잘못된 파일 경로의 일부

분류에서Dev

NHibernate 매핑 예외 : 잘못된 파일 경로의 일부

분류에서Dev

자바 메인 메소드의 루핑 및 예외 처리

분류에서Dev

모델의 외래 키에 대한 열 이름 다시 매핑

분류에서Dev

뷰와 테이블 간의 기본 및 외래 키 매핑

분류에서Dev

graphql-core는 GraphQLError로 예외를 두 번 래핑합니다.

분류에서Dev

kSoap2 POJO 매핑 클래스 캐스트 예외

분류에서Dev

Spring MVC + Hibernate + 일대일 매핑 : session.save 동안 null 포인터 예외

분류에서Dev

View MVC C #의 형식 예외

분류에서Dev

Spring-MVC의 빈 생성 예외

분류에서Dev

JPA : ManyToMany 매핑 예외

분류에서Dev

Hibernate : 매핑 맵 예외

분류에서Dev

Haskell의 유형 클래스의 예외 제약

분류에서Dev

`HttpListener`의`GetContextAsync ()`래핑