VB.Net(C# でも)で、例外エラー時のログ出力、ダイアログ表示についてご意見をお聞かせください。
実現したい事は以下になります。
・エラーダイアログ:エラーが発生したメソッドで例外をcatchしてダイアログ表示する。
・ログ出力:各メソッドでは例外を再throw または catchしないでイベントハンドラーとなるメソッドでcatchしてログ出力する。
(エラー発生メソッドからイベントハンドラーまでの階層的なスタックトレースをログに出力する為)
・例外時にエラーダイアログの表示は1度のみとする。
ここで問題になっているのが、
・trycatchを記述していないメソッドで例外発生時に自メソッドでエラーダイアログ表示されずに、
イベントハンドラーでログ出力のみ、となってしまうことです。
各メソッでは例外に対して適切なエラー内容を表示したいので、
イベントハンドラーでpublicな「ダイアログ表示済みフラグ」などを設けて判定することは避けたいです。
(フラグの初期化漏れとかもあるので)
また、全てのメソッドにtrycatchを実装することも避けたいのです。
★画面
Sub button1_Click() Handles Button1.Click
Try
共通クラス.データ取得処理()
Dim ii AS Integer = (1/0) '←★MSG出力・ログ出力!
Catch(ex As DivideByZeroException)
MSG("0割りエラー")
ログ出力()
Catch(ex As Exception)
ログ出力()
End Try
End Sub
★共通クラス
'trycatchを実装しない(想定していない)メソッド
Sub データ取得()
~DB接続ロジック~ '←★ログ出力しかされない
マスタ取得処理()
End Sub
Sub マスタ取得処理()
Try
~SQL実行ロジック~ '←★MSG出力・ログ出力!
Catch(ex As SqlException)
MSG("SQLエラー")
Throw
End Try
End Sub
案としては、
『イベント開始時にpublicなエラー情報保持クラスを生成して、各メソッドで例外エラーが設定された場合に、
イベントハンドラー側でログ出力・ダイアログ表示させる』、が思いついたのですが、
そもそも生成した保持クラスに万人がアクセスできる為にはどこで実装すればいいのか。。(インスタンスを引数として引き回すしかないのか?)
オブジェクト指向などを考慮して実装すると上記問題は解決したりするのでしょうか。
オブジェクト指向でなくても構わないのでテクニック等あればご教授ください。
宜しくお願いしします。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。