ダイコン時代の設計手法 - 例外のログ
例外のログをどの層でとるべきなのか。例えば、DAO層で発生した例外は、サービス層、プレゼンテーション層も通ることになり、基本的にどの層でもcatchすることはできる。
例外のログを書き出しは、次の場所が考えられると思います。
- 例外をthrowするクラス
- プレゼンテーション層でサービスを呼び出すクラス(例えばStrutsのAction)
- プレゼンテーション層から最初に呼び出されるサービス層のメソッド
1は自分達でthrowしない例外もログをとる必要があるので中途半端。
2と3は呼び出す側か呼び出される側かの違いですが、3の方がお勧めです。
3はプレゼンテーション層に関係無くログをとることができるためです。
例えば、2の場合、ある機能は、インタラクティブな操作が要求されるので、
Flashにしたいなんて時に困ることになります。
次に実装方法ですが、必要なすべてのクラスでtry,catchするのではなく
AOP(ThrowsInterceptor)を使うことが望ましいでしょう。