0

DataAccessExceptionDAOインターフェイスメソッドでの宣言に関して異なるポリシーを持つSpring/Hibernateコードがいくつかあります。

明示的に宣言するものもあれば、宣言しないものもあります(または時々だけ):

public interface FlightDao {

    boolean decrementSeat(Long flightId, int quantity);

    List<Flight> findFlights(String fromAirportCode, String toAirportCode) throws DataAccessException;

    public List<Flight> getFlights();

    Flight getFlight(Long id);

    Flight getFlight(String flightNumber);

    void save(Flight flight);

}

ベストプラクティスと見なされるものとその理由は何ですか?

アップデート

春のチュートリアルのセクション13.2.2から、実装するDAO pojoに@Repositoryで注釈を付けて、基になるORM(またはJDBC)例外がDataAccessException(ランタイム)例外階層に自動的に変換されるようにすることが重要です。

4

2 に答える 2

2

ここでわかるように、これは RuntimeException であるため、宣言してもしなくても、プログラミングの観点からは違いはありません。ユーザーがメソッドを実装するとき、メソッド シグネチャからこの例外を省略することを選択できます。

メソッド署名にそれを入れる唯一の理由は、それをマークして、このメソッドがこの例外をスローする可能性があることをユーザーが認識し、それをキャッチして処理するかどうかを選択できるようにすることです。

于 2012-07-09T09:48:52.503 に答える
1

フライトの検索 / フライトの取得 / 座席の減分 で何らかの例外がある場合、これらの「サービス」メソッドを呼び出すアプリケーションは、これらの例外を処理する方法について最終決定権を持つ必要があります。サービスとしての FlightDAO は、すべての例外を単純にキャッチしてスローする必要があります。新しいユーザー定義の例外を作成すると便利な場合があります...それを ServiceException または MyDAOException と呼び、FlightDAO のすべてのメソッドがこのユーザー定義の例外をスローするようにします。

于 2012-07-09T16:00:44.983 に答える