Tak. dobrym pomysłem jest stworzenie własnych niezależnych wyjątków dla każdej warstwy.
Na przykład, jeśli używasz konkretnej implementacji DAO, powinieneś zawrzeć wyjątek dotyczący implementacji do własnego ogólnego wyjątku i przekazać go do Warstwy usługi.
Należy jednak zachować wrażliwość podczas tworzenia własnej hierarchii wyjątków, tak aby nie stanowiła obciążenia dla tworzenia aplikacji, a także by była w stanie utrzymać informacje wymagane w Warstwie usługi. W większości przypadków wystarczają niestandardowe kody błędów z ogólnym wyjątkiem.
Coś w tym stylu może być używane do symulacji wyjątku dotyczącego implementacji i zgłaszane do warstwy usługi.
class AppDAOException extends Exception {
public final static int _FAIL_TO_INSERT = 1;
public final static int _UPDATE_FAILED = 2;
public final static int _SQL_ERROR = 3;
private int errorCode;
public AppDAOException(int errorCode) {
this.errorCode = errorCode;
}
public getErrorCode() {
return errorCode;
}
}
rzucanie z realizacji DAO:
try {
//code here
} catch (some.impl.SQLSyntaxException e) {
throw new AppDAOException (AppDAOException._SQL_ERROR);
}
O wycieku niebezpiecznej: może nie chcieć swoją warstwa usługa przejmować się wszystkimi wyjątkami - takimi jak:
} catch(NoRowExistsException e) {
return null;
} finally {
//release resources
}
Tak połączenie musi zostać wykonane w zależności od potrzeb aplikacji.
mógłby Pan podać przykład ten ... dziękuję –
Napisałem post na tym kiedyś z powrotem. Proszę sprawdzić https://dzone.com/articles/quotdecouplingquot-the-exception-puzzle – Santosh
ok, dzięki, pójdę przez to –