CRUD処理関連付け
最後に作成したCRUD処理メソッドをデータバインドコントロールに関連付けます(リスト5)。これにはCRUD処理それぞれに対応するSelect/Insert/Update/DelteMethodプロパティに、関連付けるコードビハインドのメソッド名を指定するだけです。それ以外はデータソースコントロールを用いた時と変わりません。
<asp:FormView ID="ReservationsFormView" runat="server" DefaultMode="Edit" DataKeyNames="ReservationId,Version" ItemType="MRRS.Entity.Reservation" SelectMethod="SelectReservation" UpdateMethod="UpdateReservation" DeleteMethod="DeleteReservation" ViewStateMode="Enabled">
以上でモデルバインドを使う準備は完了です。実行してみて予約情報の更新、削除処理が問題なく行われること、また重なりデータエラー、同時実行エラーが画面に表示されることを確認してみてください。
非モデルバインドとモデルバインドの使い分け
モデルバインドを今回紹介してきましたが、非モデルバインドが非推奨となったわけではありません。前述のとおり、すべてモデルバインドに統一するというのもコード量などの問題があり、現実的とは言えません。適材適所で使い分けるのがよいでしょう。
では、どういった基準で使い分けを行えばよいのでしょうか。その基準を考えるため、非モデルバインド、モデルバインドそれぞれの特徴を表2にまとめます。
| 非モデルバインド | モデルバインド | |
|---|---|---|
| 処理の見通し |
処理前後のイベントハンドラーと データソースコントロールで指定した型の メソッドに処理が分散するため、 見通しは悪い |
1つのアクションに対応した処理は 1つのメソッドにまとまるため、 見通しが良い |
|
コードビハインドの コード量 |
少ない(場合によっては不要) | 多い |
| モデルへの値の手動設定 | 型安全でない | 型安全 |
|
検索処理にバインド できるデータ元 |
ほぼ同じ | |
以上の特徴から、私なりに考えた使い分けの基準は「単純な検索処理のみなら非モデルバインド、ある程度複雑な更新処理が絡むならモデルバインドを使う」です。サンプル内の具体的な例で言えば、ドロップダウンリストの項目など絞り込み条件がないか単純なものは非モデルバインド、ビジネスデータの更新処理はモデルバインドを使う、です。
ただ、Webフォームでのモデルバインドはまだ登場したばかりなので、まだ評価が十分とはいえませんし、今後のバージョンアップで改善される点もあるでしょう。読者の皆さんには、ぜひ実際にいろいろと試してみて、自分が抱えている問題の解決に役立つかどうかを含めて評価を下してほしいと思います。また、こんな良い使い方がある、などがあれば、ぜひ教えてください。
まとめ
今回はASP.NET 4.5の新機能のうち、もっとも大きな目玉である「モデルバインド」について解説しました。今回のポイントは次のとおりです。
-
従来のデータソースコントロール、データバインドコントロールを用いた非モデルバインドでは、1つのアクションに対応する処理の記述が分散されてしまう
- しかも業務エラーを例外として扱う必要がある
-
モデルバインドを使うことでいわゆるCRUD処理それぞれに対応したメソッドにまとめて処理を記載できる
- 業務エラーを戻り値として扱うことができる
-
モデルバインドを使うには以下の手順が必要
-
CRUD処理に対応したメソッドをコードビハインドに定義する
- 検索処理の引数にはQueryString属性などを使い、値の設定元を指定できる
- データバインドコントロールのSelect/Insert/Update/DeleteMethodプロパティに、コードビハインドに定義したCRUDメソッド名を指定する
-
CRUD処理に対応したメソッドをコードビハインドに定義する
-
非モデルビハインドとモデルバインドは次の基準で使い分ける
- 非モデルバインド:引数が少ない単純な検索処理のみの場合
- モデルバインド:ある程度複雑な更新処理も行う場合
さて、次回はモデルバインドとセットで使う「モデル検証」について紹介します。お楽しみに。
