11月9日(火)1、2コマ目

今日、やったこと

  • 前回の課題(C#+トランザクション)の解説
  • 例外処理の話(C#)

今日のホワイトボード

前回の課題(C#+トランザクション)の解説

採点して、以下が気になりました。

  • 変更対象のIDと数量を別々の変数で扱う
  • 1商品毎にコミット、ロールバックをする

図 採点して気になったところ


ソースコードをあげておきます。

StockDAO.cs


Index.cshtml


Index.cshtml.cs


例外処理について

処理終了時の状態

処理終了時は

  • 正常終了
  • 異常終了

の2つに分かれる。

さらに、異常終了は

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

に分類し、想定内のエラーを業務エラー想定外のエラーを例外と呼ぶ。

ただ、想定外のエラー(例外)はよくよく考えるとすべて想定内のエラー(業務エラー)にすることができる。

そこで、想定内のエラー(業務エラー)は

 ユーザーに通知してリカバリをしてほしい(できる)エラー

と再定義する。例えば、入力内容がおかしい場合など。

想定外のエラー(例外)は

 ユーザーに通知してもリカバリできないエラー

とする。例えば、DB接続に失敗したなど。

図 処理終了時の状態


処理終了時の状態をどうやって伝える

C#ではメソッド呼び出し元に通知する手段として

  • 戻り値
  • 例外スロー

が使える。これらをうまく使い分けることが今回のポイント。

図 処理終了時の状態を通知する手段


例外スロー時

一番ダメなのは、

 例外をキャッチして、なにもしない(catchブロック内が空)

です。

例外スロー時にやることがあるときだけ、try{}catch{}を使うこと

なにもないなら、例外は呼び出し元へスローすること。

図 例外スロー時は


DBアクセス時にエラーが発生したら

オラクルの場合、エラーコード(ORA-xxxxx)が返される。

プログラム上では、OracleExceptionがスローされる。Numberプロパティに5ケタのエラーコード(xxxxxの部分)がセットされている。

図 DBアクセス時にエラーが発生すると


サンプルソース

ユーザー登録を行うサンプルを作成しました。

ユーザー登録の際、

  • IDが重複した
  • パスワードが短い

のエラーが発生します(想定内のエラー)。


UsersInsertResultEnum

ユーザー登録結果を通知するための列挙型

列挙型とは定数のセットと思っていただければ。


UserDAOクラス


Index.cshtml.cs


このブログの人気の投稿

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

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

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