10月3日(火)1、2コマ目

今日、やったこと

.Netでの例外

今日のホワイトボード

処理終了時の状態

メソッド終了時は

  • 正常終了
  • 異常終了

の2つに分かれる。この異常終了はさらに

  • 想定内のエラー
  • 想定外のエラー

に分かれる。

想定外のエラーももっとよく考えれば想定内のエラーになるため、線引きができない。

そこで、

想定のエラー => 利用者に通知してリカバリしてほしい(できる)エラー

想定のエラー => 利用者に通知してもなにもできないエラー

と再定義する。

図 想定内のエラー、想定外のエラー

エラーを伝えるには

メソッド呼び出し元になにかを伝える手段は
  • 戻り値
  • 例外スロー
の2種類がある。これをメソッドの結果に応じて使分ける。

〇想定内のエラー(利用者に通知してリカバリしてほしいエラー)

 戻り値で通知

〇想定外のエラー(利用者に通知してもしょうがないエラー)

 例外スローで通知
※この指針はこの授業内でのルールとします。世間一般的な絶対的なルールではありません。

図 呼び出し元に通知する手段

例外がスローされたときは

やってはいけないこと => 例外をキャッチしてなにもしない
これは絶対守ること。
図 例外がスローされたとき

OracleException

ODP.NETでオラクルDBにアクセスする際、エラーが起きるとOracleExceptionがスローされる。その例外のNumberプロパティにはOracleのエラーコードがセットされている。
図 OracleException

サンプルアプリケーション

ユーザー登録を行うアプリケーションを作成。
入力内容をDBに登録するが、このとき以下のエラーが想定される。
  • 入力されたIDはすでに利用中
  • 入力された紹介者のIDは存在しない
いずれも利用者に通知して、リカバリをしてほしい(できる)エラー。

UserDAO.cs

ポイントはInsert()メソッド。
戻り値が列挙型のUserInsertResultEnum型になっている。結果が以下の
  • 成功
  • IDが重複
  • 紹介者IDがない
の3つになるため、列挙型で各結果を伝える。

UserInsertResultEnum.cs

ユーザー登録結果を伝えるための列挙型。

Index.cshtml.cs

UserDAOのInsert()の戻り値(UserInsertResultEnum)によって、表示するメッセージを切替。
また、未入力項目のチェックに引っかかったら、一旦エラーメッセージ付き例外をスローして即キャッチ、エラーメッセージを表示。

Index.cshtml


次回は

練習問題をやります。




このブログの人気の投稿

12月22日(金)1、2コマ目

12月21日(木)1、2コマ目

10月24日(火)1、2コマ目