ひがやすを技術ブログ

電通国際情報サービスのプログラマ

ダイコン時代の設計手法 - 例外のログ

例外のログをどの層でとるべきなのか。例えば、DAO層で発生した例外は、サービス層、プレゼンテーション層も通ることになり、基本的にどの層でもcatchすることはできる。

例外のログを書き出しは、次の場所が考えられると思います。

  1. 例外をthrowするクラス
  2. プレゼンテーション層でサービスを呼び出すクラス(例えばStrutsのAction)
  3. プレゼンテーション層から最初に呼び出されるサービス層のメソッド

1は自分達でthrowしない例外もログをとる必要があるので中途半端。
2と3は呼び出す側か呼び出される側かの違いですが、3の方がお勧めです。
3はプレゼンテーション層に関係無くログをとることができるためです。
例えば、2の場合、ある機能は、インタラクティブな操作が要求されるので、
Flashにしたいなんて時に困ることになります。


次に実装方法ですが、必要なすべてのクラスでtry,catchするのではなく
AOP(ThrowsInterceptor)を使うことが望ましいでしょう。