11月14日(月)1、2コマ目
今日、やったこと
例外(C#)
今日のホワイトボード
処理終了時の状態
処理終了時は
- 正常終了
- 異常終了
の2つに分かれます。
さらに、異常終了も
- 想定内のエラー
- 想定外のエラー
の2つに分かれます。
エラーを「想定内」、「想定外」 分けていますが、「想定外」なエラーもよく考えれば「想定内」なエラーになります。
ここで、エラーの内容を以下のように再定義します。
- 「想定内のエラー」は利用者にエラー発生を伝えて、リカバリをしてほしいエラー。
- 「想定外のエラー」は利用者に通知してもしょうがないエラー。
|
| 図 想定内のエラー、想定外のエラー |
処理結果をどうやって伝える
処理(メソッド)の結果は
〇ユーザーに通知してリカバリしてほしいエラー
戻り値で通知
〇ユーザーに伝えてもしょうがないエラー
例外スローで通知
|
| 図 結果を伝える方法 |
しかし、この授業では今後この方針でいきます。
戻り値は
結果が
- 成功
- 失敗
の2種類ならbool型へ。
処理結果の状態が3つ以上なら列挙型(enum型)で。
|
| 図 戻り値のつかいわけ |
例外スロー時の対応
やってはいけないことは
例外をキャッチしてもなにもしない(catchブロック内が空)
です。
基本的に、例外がスローされたら
- そこで処理は中断
- 呼び出し元へエラー発生を通知(例外スロー)
です。
|
| 図 例外スロー時の対応 |
例外はいつキャッチする?
エラー発生時になにかやるべきことがあるとき。
|
| 図 例外はいつキャッチする |
DB(Oracle)アクセス時にエラーが発生したら
オラクルはエラー発生時にエラーコード(ORA-xxxxx)が返される。
C#では
DBアクセス時にエラー発生=>OracleExceptionスロー
OracleExceptionのNumberプロパティにエラーコード(ORA-xxxxxのxxxxx)が代入されている
|
| 図 DBアクセス時にエラー発生 |
サンプルアプリケーション
ユーザー登録をするアプリケーションを作成しました。
ユーザー登録の際、入力されたユーザーID、紹介者IDに対して以下のケースが想定される。
- IDはすでに利用中=>「別のIDを指定してください」
- 紹介者はいない=>「指定された紹介者はいません。正しい紹介者のIDを入力してください」
ユーザー登録の結果が
- 成功
- IDは利用中
- 紹介者はいない
の3つなので、列挙型を使って伝える。
RegistUserResultEnum.cs
ユーザー登録結果を通知するための列挙型。
VisualStudioでは「追加」メニューに列挙型はありません。クラスを追加->列挙型へ変更です。
UserDAO.cs
Insert()メソッドの戻り値にRegistUserEnumを使っています。
次回は
ユーザー登録サンプルアプリケーションのつづきをやります。





