投稿

12月22日(木)3、4コマ目

イメージ
今日、やったこと [評価用課題]オークションサイト(Java) 今日のホワイトボード <A>タグ <A>タグはリンク(クリックするとリンク先ページをリクエスト)を作るためのタグ。 ?以降にパラメータ名=値でリクエスト先にデータを渡すことができる リンククリック時はリンク先をGETコマンドでリクエスト 図 <A>タグ 次回は 課題の時間ですが、終了時に課題を回収します。 

12月19日(月)1、2コマ目

イメージ
今日、やったこと Javaでの例外 今日のホワイトボード Javaには例外が2種類ある Javaには 検査例外 と 実行時例外 の2種類がある。ちなみに、C#の例外はJavaの実行時例外と同じ。 図 検査例外と実行時例外 検査例外をスローするメソッドは throws句で例外スローを宣言する必要がある 。 検査例外をスローするメソッドを呼び出す際は、例外をキャッチするか、キャッチしないならthrows句で例外スローを宣言する必要がある 。 例外の使い分け 検査例外は必ずどこかでキャッチする必要がある。(キャッチしないとコンパイルエラー) そのため、エラー処理を強制することができる。よって、利用者にリカバリ処理をしてほしいエラーは検査例外スローで通知すれば、どこかで必ずエラー処理をすることになる。 図 検査例外と実行時例外の使い分け サンプルアプリケーション ユーザー登録を行うアプリを作りました。 ポイントは 利用者にリカバリしてほしいエラーはなに? そんなエラー発生時にスローする検査例外をどうする? です。 図 エラー発生時の対応 Userクラス(User.java) とくになにもないかと。 UserDAOクラス(UserDAO.java) insert()メソッドがポイント。 SQL実行時にエラーが発生すると、SQLExceptionがスローされる。 そのSQLExceptionにはgetErrorCode()メソッドがあり、戻り値がオラクルのエラーコード。 そのエラーコードで何が起きたかがわかるため、対応する検査例外をスローしている。 検査例外クラス(DupplicateIDException.java) ...

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 次回は 新シリーズ「例外処理について」をやります。

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

イメージ
今日、やったこと [練習問題]C#+ロック 今日のホワイトボード 複数のSQLを同一トランザクションのメンバにするには 同じトランザクションオブジェクトを参照するコマンドオブジェクトは同じトランザクションのメンバになります。 図 複数のSQLを同一トランザクションのメンバにする ロック用SQLの実行 C#にはJavaのexecute()メソッドに相当する超ユーティリティメソッドがないため、ExecuteScalar()で代用してください。 図 ロック用SQLを実行する 今日のソースコード Startup.cs いつもどおり。セッションオブジェクトは使いません。 Item.cs いつもどおり。ID、商品名、在庫数のプロパティとコンストラクタ。 ItemDAO.cs Update()メソッドがポイント。 ロック用OracleCommandオブジェクトと更新用OracleCommandオブジェクトの両方に同じTransactionオブジェクトをセットすること。  Index.cshtml.cs OnPost()の引数は押されたボタンのvalue属性値(商品ID)のみ。 ボタンからIDを取得、引き当て数入力用テキストボックスのname属性を生成する。 Index.cshtml 特にややこしいことはないかと。 次回は C#+トランザクションの確認テストをやります。 確認テストの注意点 今回の課題は前回Javaで作ってもらったものと同じようなものです。 前回のJavaの提出物には無駄な結合をしている人がちょこちょこおられました。今回は注意してください。 図 無駄な結合