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を使っています。


次回は

ユーザー登録サンプルアプリケーションのつづきをやります。

このブログの人気の投稿

10月27日(木)3、4コマ目

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