投稿

11月, 2022の投稿を表示しています

11月24日(木)3、4コマ目

イメージ
今日のソースコード C#+例外 練習問題「パスワード変更」 先日作ってもらった「パスワード変更」の正解例のソースコードをあげておきます。 RegistPasswordResultEnum.cs パスワード変更結果を通知するための列挙型。 UserDAO.cs ポイントは Insert()メソッドでSQL実行(cmd.ExecuteNonQuery())時に発生する例外に応じて処理を行っているところ。 また、ステップ2用にパスワードが設定済みか否かを判断するためのGetPasswordCount()メソッドがある。 Index.cshtml.cs OnPost()にて、パスワード変更メソッド(UserDAO.Insert())の戻り値の応じて、エラーメッセージをセットしている。 Index.cshtml とくにややこしいところはないと思います。 今日、やったこと [評価用課題]オークションサイト(C#版) 今日のホワイトボード 階層化 今回の課題は階層化をしっかりしてください。 図 階層化 たとえば、「認証」はServiceクラスが提供する機能で、 UserDAOクラスには認証機能は作りません 。UserDAOクラスには認証のために必要な機能のうち、DBアクセス部分(ログイン名とパスワードの組み合わせ件数をカウントする機能)だけを作ります。 SQLをちゃんと使うこと UserDAOクラスのログイン名とパスワードの組み合わせ件数をカウントするメソッドですが、ぜったいに下図のように ループをまわしてカウントしない でください。 図 やってはいけないこと ページ遷移 今回は3ページ構成です。よって、ページ遷移が必要になります。 ページ間をまたいで共有するデータ(ログインユーザー情報など)があります。ひさしぶりにSessionオブジェクトが必要です。 次回は 引き続き、課題の時間です。

11月17日(木)3、4コマ目

イメージ
今日、やったこと 例外(C#)のサンプルアプリケーション 例外(C#)の練習問題 今日のホワイトボード サンプルアプリケーション 前回の続きです。 前回はDBアクセス部分を実装しました。 前回、お伝え忘れていました。戻り値で結果を伝える際、 1なら成功 2はxxxエラー 3はxxxエラー のようにマジックナンバーで伝えるのはやめてください。 戻り値からなにが起きたかわからないです。 図 マジックナンバーはやめて 今回は画面周りです。 Index.cshtml.cs 入力チェックをしています。本来なら未入力エラーはリカバリしてほしいエラーなので、戻り値で伝える必要があります。が、if()のネストが深くなる、すでにtryブロックがある、ことから例外スローで通知しています。 Index.cshtml ここは特に問題ないかと。 ちなみに未入力チェックや入力内容チェックはHTMLでもできます。 C#での入力チェック stringクラスにはnullまたは空白文字列をチェックするメソッドがあります。 図 null、空白チェック 次回は 今回、作ってもらった”[練習問題]パスワード変更"の解説と評価用課題を出します。 

11月14日(月)1、2コマ目

イメージ
今日、やったこと 例外(C#) 今日のホワイトボード 処理終了時の状態 処理終了時は 正常終了 異常終了 の2つに分かれます。 さらに、異常終了も 想定内のエラー 想定外のエラー の2つに分かれます。 エラーを「想定内」、「想定外」 分けていますが、「想定外」なエラーもよく考えれば「想定内」なエラーになります。 ここで、エラーの内容を以下のように再定義します。 「想定 内 のエラー」は 利用者にエラー発生を伝えて、リカバリをしてほしい エラー。 「想定 外 のエラー」は 利用者に通知してもしょうがない エラー。 図 想定内のエラー、想定外のエラー 処理結果をどうやって伝える 処理(メソッド)の結果は 〇ユーザーに通知してリカバリしてほしいエラー   戻り値で通知 〇ユーザーに伝えてもしょうがないエラー   例外スローで通知 図 結果を伝える方法 ただし、 この方針は絶対的なものではありません 。 しかし、この授業では今後この方針でいきます。 戻り値は 結果が 成功 失敗 の2種類ならbool型へ。 処理結果の状態が3つ以上なら列挙型(enum型)で。 図 戻り値のつかいわけ 例外スロー時の対応 やってはいけない ことは   例外をキャッチしてもなにもしない(catchブロック内が空) です。 基本的に、例外がスローされたら そこで処理は中断 呼び出し元へエラー発生を通知(例外スロー) ...

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

イメージ
今日、やったこと [課題]C#+トランザクション(コミット・ロールバック、ロック) 今日の課題 2つのボタン 1つの画面にグループ選択時にクリックする”検索ボタン”と在庫引き当てをする”引当ボタン”の2つボタンがあります。OnPost()ではクリックされたボタンで処理が分かれるため、どのボタンがクリックされたかを判別する必要があります。 図 2つのボタン 正解例 ソースコードを挙げておきます。 StockDAO.cs 今までに合わせ技です。とくにややこしいことはないかと思います。 Index.cshtml.cs ポイントは クリックされたボタンを判定する 入力された引き当て数はどの商品か判定する の2つでしょうか。  Index.cshtml 次回は 新シリーズ「例外処理について」をやります。