例外処理方式
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>アプリケーション設計のポイント]]
*目次 [#b1b12edc]
#contents
*概要 [#pf4a927d]
”Open棟梁”に組み込まれた例外処理の基本方針を説明する。
*例外処理の処理フロー [#bae9594d]
-例外処理の処理フローを、コラボレーション図、シーケンス図...
-例外処理の処理フローは、プログラムの最下層で例外がスロー...
次の流れで例外が伝播し、最上位層に伝わるようになっている。
-フレームワークで用意した「例外の型」毎に、処理フローが個...
-なお、2層C/Sの例外処理の処理フローでは、「業務例外」の場...
トランザクションのロールバック & 接続切断をしない(その...
**コラボレーション図 [#b4aab71e]
#ref(ModuleAndExceptionPropagation.png,left,nowrap,クラス...
**シーケンス図 [#e427101f]
#ref(ExceptionSequence.png,left,nowrap,例外処理の処理フロ...
*例外の種類 [#va9dc24d]
**概要 [#j5fa1baf]
#ref(SummaryOfExceptionType.png,left,nowrap,例外の種類の...
**例外の型名 [#laa21711]
***業務例外 [#s1d87ff0]
業務的なエラーを通知するための例外
***システム例外 [#ua602d39]
環境上の問題などで発生する例外であるが、アプリケーション...
***その他、一般的な例外 [#ydc9bed7]
バグや環境上の問題で発生する想定外の例外(ランタイム エラ...
**例外の業務続行の可・不可 [#j3817819]
***業務例外 [#t7b9a154]
-業務続行可能
-元の画面に戻るか、任意の業務画面まで戻るなどして業務続行。
***システム例外 [#u7d1fbce]
-業務続行不可能
-汎用エラー画面に遷移して業務を停止する(か、ユーザに確認...
***その他、一般的な例外 [#x38d0db3]
-業務続行不可能
-汎用エラー画面に遷移して業務を停止する(か、ユーザに確認...
*例外の種類と、ハンドリングの説明 [#q2bdf5f0]
|項番|例外の種類|ハンドリングの説明|h
|1|業務例外|業務続行可能なエラー用の例外をスローしたり、...
|2|システム例外|業務続行不可能なエラー用の例外をスローし...
|3|その他、一般的な例外|ランタイム エラーなど、UPで特...
**業務例外 [#c4d020af]
#ref(BusinessApplicationException.png,left,nowrap,業務例外)
***B層で発生 [#wba10a2f]
B層で「業務例外」をスローすると以下の処理が実行される。
-トランザクションをロールバック、DBの切断。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-P層のイベント処理に正常系の戻り値を戻す(ErrorFlagがtrue...
***P層で発生 [#n19aea51]
P層で「業務例外」をスローすると以下の処理が実行される。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-共通エリアにメッセージ表示
**システム例外、その他一般的な例外 [#c4d020af]
#ref(BusinessSystemException_ElseException.png,left,nowra...
***B層で発生 [#wba10a2f]
B層で「システム例外」、「その他一般的な例外」をスローする...
-トランザクションをロールバック、DBの切断。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-P層にそのまま例外を返す(リスローされる)。
***P層で発生 [#n19aea51]
P層で「システム例外」、「その他一般的な例外」をスローする...
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-汎用エラー画面を呼び出し、メッセージを表示する。
-業務を停止する。
**例外の振替処理方式 [#t1b2b0ba]
例えば、D層でレコード追加時のキー重複エラー、コマンド タ...
これはデータ プロバイダの提供する例外、すなわち、「その他...
これをB層のルートの例外処理で「業務例外」に振り替えれば、...
これから、元の画面に戻るか、業務開始時点の画面まで戻るな...
追加時のキー重複、デッドロック、ロックタイムアウト、コマ...
”Open棟梁”の「業務コード親クラス2」のカスタム例外処理部に
-「その他、一般的な例外」 → 「業務例外」
-「その他、一般的な例外」 → 「システム例外」
などの例外の振替処理を実装できる。
下図は、「その他、一般的な例外」 → 「業務例外」へ例外を振...
#ref(ChangeException.png,left,nowrap,例外の振替処理方式)
*例外処理の基本方針 [#xb6f58da]
**例外のtry ~ catch [#qee70f28]
-例外のtry ~ catchは、[[P層フレームワーク>#bae9594d]]側...
-P層フレームワーク的なモノを導入しないで実装する場合、
--Application.ThreadException~
UIスレッドで発生した未処理例外をまとめてハンドリング(Win...
--Application.DispatcherUnhandledException~
UIスレッドで発生した未処理例外をまとめてハンドリング(WPF)
>イベントのハンドラを併用する。
-他にも、以下のような例外処理用のイベントのハンドラが存在...
--AppDomain.CurrentDomain.UnhandledException~
全ての[[未処理例外>https://techinfoofmicrosofttech.osscon...
--AppDomain.CurrentDomain.FirstChanceException~
[[ファーストチャンス例外>https://techinfoofmicrosofttech....
--TaskScheduler.UnobservedTaskException
---バックグラウンドで発生した未処理例外をUnhandledExcepti...
---App.configファイルのThrowUnobservedTaskExceptionsの設...
(trueに設定すると、.NET 4.5の動作を.NET 4.0と同じプログ...
-参考
--WPF:例外をまとめてトラップするには?[C#/VB]:.NET T...
https://www.atmarkit.co.jp/ait/articles/1512/16/news026.h...
--捕捉されなかった例外がスローされたことを知る - .NET Tip...
https://dobon.net/vb/dotnet/programing/unhandledexception...
--https://github.com/OpenTouryoProject/OpenTouryo/blob/de...
**エラー メッセージの設定と表示方針 [#h6682895]
-ErrorMessageIDに対応するメッセージの雛形を任意の外部リソ...
-メッセージの雛形に、String.Formatを使用して個別メッセー...
※ メッセージ例:「{0}」に、「{1}」権限がありません。
-その場合、個別メッセージは、「業務例外」をスローする前に...
***業務例外 [#te62af4d]
-画面:汎用メッセージ・エリアなど
-ログ:エラー ログではなく、ワーニング ログを出力する。
***システム例外 [#p82ed189]
-画面:汎用メッセージ・エリアなど
-ログ:「システム例外」の例外情報をエラー ログに出力する。
***その他、一般的な例外 [#lf107748]
-画面:汎用エラー画面など
-ログ:「その他、一般的な例外」の例外情報をエラー ログに...
終了行:
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「...
-[[戻る>アプリケーション設計のポイント]]
*目次 [#b1b12edc]
#contents
*概要 [#pf4a927d]
”Open棟梁”に組み込まれた例外処理の基本方針を説明する。
*例外処理の処理フロー [#bae9594d]
-例外処理の処理フローを、コラボレーション図、シーケンス図...
-例外処理の処理フローは、プログラムの最下層で例外がスロー...
次の流れで例外が伝播し、最上位層に伝わるようになっている。
-フレームワークで用意した「例外の型」毎に、処理フローが個...
-なお、2層C/Sの例外処理の処理フローでは、「業務例外」の場...
トランザクションのロールバック & 接続切断をしない(その...
**コラボレーション図 [#b4aab71e]
#ref(ModuleAndExceptionPropagation.png,left,nowrap,クラス...
**シーケンス図 [#e427101f]
#ref(ExceptionSequence.png,left,nowrap,例外処理の処理フロ...
*例外の種類 [#va9dc24d]
**概要 [#j5fa1baf]
#ref(SummaryOfExceptionType.png,left,nowrap,例外の種類の...
**例外の型名 [#laa21711]
***業務例外 [#s1d87ff0]
業務的なエラーを通知するための例外
***システム例外 [#ua602d39]
環境上の問題などで発生する例外であるが、アプリケーション...
***その他、一般的な例外 [#ydc9bed7]
バグや環境上の問題で発生する想定外の例外(ランタイム エラ...
**例外の業務続行の可・不可 [#j3817819]
***業務例外 [#t7b9a154]
-業務続行可能
-元の画面に戻るか、任意の業務画面まで戻るなどして業務続行。
***システム例外 [#u7d1fbce]
-業務続行不可能
-汎用エラー画面に遷移して業務を停止する(か、ユーザに確認...
***その他、一般的な例外 [#x38d0db3]
-業務続行不可能
-汎用エラー画面に遷移して業務を停止する(か、ユーザに確認...
*例外の種類と、ハンドリングの説明 [#q2bdf5f0]
|項番|例外の種類|ハンドリングの説明|h
|1|業務例外|業務続行可能なエラー用の例外をスローしたり、...
|2|システム例外|業務続行不可能なエラー用の例外をスローし...
|3|その他、一般的な例外|ランタイム エラーなど、UPで特...
**業務例外 [#c4d020af]
#ref(BusinessApplicationException.png,left,nowrap,業務例外)
***B層で発生 [#wba10a2f]
B層で「業務例外」をスローすると以下の処理が実行される。
-トランザクションをロールバック、DBの切断。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-P層のイベント処理に正常系の戻り値を戻す(ErrorFlagがtrue...
***P層で発生 [#n19aea51]
P層で「業務例外」をスローすると以下の処理が実行される。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-共通エリアにメッセージ表示
**システム例外、その他一般的な例外 [#c4d020af]
#ref(BusinessSystemException_ElseException.png,left,nowra...
***B層で発生 [#wba10a2f]
B層で「システム例外」、「その他一般的な例外」をスローする...
-トランザクションをロールバック、DBの切断。
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-P層にそのまま例外を返す(リスローされる)。
***P層で発生 [#n19aea51]
P層で「システム例外」、「その他一般的な例外」をスローする...
-終了処理(例外処理)が呼び出される(アクセス ログ出力な...
-汎用エラー画面を呼び出し、メッセージを表示する。
-業務を停止する。
**例外の振替処理方式 [#t1b2b0ba]
例えば、D層でレコード追加時のキー重複エラー、コマンド タ...
これはデータ プロバイダの提供する例外、すなわち、「その他...
これをB層のルートの例外処理で「業務例外」に振り替えれば、...
これから、元の画面に戻るか、業務開始時点の画面まで戻るな...
追加時のキー重複、デッドロック、ロックタイムアウト、コマ...
”Open棟梁”の「業務コード親クラス2」のカスタム例外処理部に
-「その他、一般的な例外」 → 「業務例外」
-「その他、一般的な例外」 → 「システム例外」
などの例外の振替処理を実装できる。
下図は、「その他、一般的な例外」 → 「業務例外」へ例外を振...
#ref(ChangeException.png,left,nowrap,例外の振替処理方式)
*例外処理の基本方針 [#xb6f58da]
**例外のtry ~ catch [#qee70f28]
-例外のtry ~ catchは、[[P層フレームワーク>#bae9594d]]側...
-P層フレームワーク的なモノを導入しないで実装する場合、
--Application.ThreadException~
UIスレッドで発生した未処理例外をまとめてハンドリング(Win...
--Application.DispatcherUnhandledException~
UIスレッドで発生した未処理例外をまとめてハンドリング(WPF)
>イベントのハンドラを併用する。
-他にも、以下のような例外処理用のイベントのハンドラが存在...
--AppDomain.CurrentDomain.UnhandledException~
全ての[[未処理例外>https://techinfoofmicrosofttech.osscon...
--AppDomain.CurrentDomain.FirstChanceException~
[[ファーストチャンス例外>https://techinfoofmicrosofttech....
--TaskScheduler.UnobservedTaskException
---バックグラウンドで発生した未処理例外をUnhandledExcepti...
---App.configファイルのThrowUnobservedTaskExceptionsの設...
(trueに設定すると、.NET 4.5の動作を.NET 4.0と同じプログ...
-参考
--WPF:例外をまとめてトラップするには?[C#/VB]:.NET T...
https://www.atmarkit.co.jp/ait/articles/1512/16/news026.h...
--捕捉されなかった例外がスローされたことを知る - .NET Tip...
https://dobon.net/vb/dotnet/programing/unhandledexception...
--https://github.com/OpenTouryoProject/OpenTouryo/blob/de...
**エラー メッセージの設定と表示方針 [#h6682895]
-ErrorMessageIDに対応するメッセージの雛形を任意の外部リソ...
-メッセージの雛形に、String.Formatを使用して個別メッセー...
※ メッセージ例:「{0}」に、「{1}」権限がありません。
-その場合、個別メッセージは、「業務例外」をスローする前に...
***業務例外 [#te62af4d]
-画面:汎用メッセージ・エリアなど
-ログ:エラー ログではなく、ワーニング ログを出力する。
***システム例外 [#p82ed189]
-画面:汎用メッセージ・エリアなど
-ログ:「システム例外」の例外情報をエラー ログに出力する。
***その他、一般的な例外 [#lf107748]
-画面:汎用エラー画面など
-ログ:「その他、一般的な例外」の例外情報をエラー ログに...
ページ名: