- Public Function A()
- Try
- If Not AA() Then
- Return False
- End If
- ' なんらかの処理
- Catch ex As Exception
- MessageBox.Show("A にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- Return False
- End Try
- Return True
- End Function
- Public Function AA() As Boolean
- Try
- If Not AAA() Then
- Return False
- End If
- ' なんらかの処理
- Catch ex As Exception
- MessageBox.Show("AA にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- Return False
- End Try
- Return True
- End Function
- Public Function AAA() As Boolean
- Try
- ' なんらかの処理
- Catch ex As Exception
- MessageBox.Show("AAA にてエラーが発生しました。", "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- Return False
- End Try
- Return True
- End Function
- A関数処理
- AA関数処理
- AAA関数処理
- AA関数処理
- A関数処理
- If Not AAA() Then
- Return False
- End If
私はこの記述が面倒くさいと考えました。
面倒な理由は
・ If Not ~ という記述を毎回行わないといけない。
・ エラーメッセージの記述が面倒。メンテナンスも面倒。
そこで考案した方法は、
- Public Class ExitException
- Inherits Exception
- Public Sub New(Optional ByVal ErrMsg As String = "エラーが発生しました。")
- MyBase.New(ErrMsg)
- End Sub
- Public Sub New(ByVal ErrMsg As String, ByVal ex As Exception)
- MyBase.New(ErrMsg, ex)
- End Sub
- End Class
- Public Function A()
- Try
- Call AA()
- ' なんらかの処理
- Catch ex As Exception
- ErrMsg(ex, "A にてエラーが発生しました。")
- Throw New ExitException
- End Try
- Return True
- End Function
- Public Function AA() As Boolean
- Try
- Call AAA()
- ' なんらかの処理
- Catch ex As Exception
- ErrMsg(ex, "AA にてエラーが発生しました。")
- Throw New ExitException
- End Try
- Return True
- End Function
- Public Function AAA() As Boolean
- Try
- ' なんらかの処理
- Catch ex As Exception
- ErrMsg(ex, "AAA にてエラーが発生しました。")
- Throw New ExitException
- End Try
- Return True
- End Function
- Public Sub ErrMsg(ByVal ex As Exception, Optional ByVal Message As String = "")
- If TypeOf ex Is ExitException Then
- Exit Sub
- Else
- If Message = "" Then
- ' メッセージを指定していない場合
- Message = "不正なエラーが発生しました。"
- ' 実行関数名取得してメッセージに含める。これに関してはまた改めて・・
- End If
- MessageBox.Show(Message, "エラー発生", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
- End If
- End Sub
そして共通エラークラスとして ExitException というのが増えており、 ErrMsgという共通関数が増えています。
ExitException ・・・ 発生した場合、エラーメッセージを表示しないエラー。素通りのエラー。
ErrMsg ・・・ エラーメッセージを表示する関数。ログ書き込みとかもここで実装していいかもしれません。
クラス化してログ書き込みパラメータとかにするともっといいかもしれませんね。
Throw New ExitException を実行するとエラーメッセージを出さずに親の関数にエラーを通知できると考えれば良いと思います。
また、ErrMsgなどで呼び出し元の実行関数名を取得することもできるので、エラーメッセージやログに活用することもできます。
とりあえず少し走り書きで書きましたが、ここまで。
0 件のコメント:
コメントを投稿