2011年8月23日火曜日

実行時例外をうまく使うと便利だしコードがすっきりする!

RuntimeExceptionを知った

Java例外の種類

  • チェック例外
    • SQLExceptionとかIOExceptionとか
  • 非チェック例外
    • 実行時例外とか、RuntimeExceptionとか呼ばれるやつ。
  • エラー
    • 多分コンパイル時のエラーのことかな?
の三種類がある。

何かシステムを作るときは、階層に分けて作っていくのが普通だと思う。

データソースにJDBCを使用してアクセスするDAOを作ったとする。
そこで吐かれるSQLExceptionをどう処理するか?
例外を詰め替える、うん、、、何をスローしようか?

で悩んだ結果SQLRuntimeExceptionを使おう!ということにたどり着いた。
RuntimeException(実行時例外)を使えば、throwやcatchをする必要がなくなる。(強制されなくなる)

手元のEffective Javaさんから引用すると、
項目40「回復可能な状態にはチェックされる例外を、プログラミングエラーには実行時例外を使用する」
との事。

throwやcatchを強制しない例外があり、それを使ってもよい

マジで!それ便利!
っていうのが正直な感想!

自分が今やってるのが…
(Struts2)
 JSP ⇔ インセプター ⇔ Actionクラス ⇔ DAO ⇔ JDBC ⇔ DB
という、Struts2だけを使った構成

JDBCがSQLExceptionを吐き出しても、DAOは何もできない。
(もしかしてクラスタ構成組んでいたら別のDBに接続しなおすとかあるのかな?参照系はスレーブに飛ばすとか。そんなのアプリケーションレイヤーではやらないか)
かと言って、上までthrowし続けるのもだるい。
RuntimeExceptionを発生させた後は、Struts2のglobal-exception-mappingsあたりを設定して適切なページに飛ばせば良いと思っている。

DBエラーが出た=時間を置いて接続してもらうか、管理者に連絡ぐらいしか解決策のない、プログラムでは解決することができない問題はRuntimeExceptionを使うべきだ、ということがワカタ。
(ログは取るべきなんだろぅ)

既にベストな解決策はあるかと

SpringではJDBCを抽象化したSpring DAOってゆー機能があるらしい
Hibernate使えばその辺もやってくれるんだろうなーという気もする
が、上位技術を使う前にある程度足元の技術はしっかりと押さえなきゃ

Struts2は単体で使うのではなく、他のフレームワークと組み合わせて使うのが一般的だそうで。
それに、仕事で使うようなので、Hibernateを勉強しなくては…。

本気出す!

0 件のコメント:

コメントを投稿