概要
ここでは、Spring MVCで重要な概念である、Binderについて見ていきます。 Binderを使用してデータオブジェクトを操作することをバインドといいます。 実はSpring自体の重要な概念です。
バインドとは Spring MVCの専門用語ではありません。Spring一般の用語です。英訳は、「結び付ける」という意味です。 ある値を対象オブジェクト(モデル)に結び付けます。「結び付ける」とは、具体的には以下の処理のことです。 (妥当性チェックも含まれるところもポイントです) ・型変換をし、値を対象オブジェクトに設定する ・プロパティ存在有無エラーと型変換エラーと妥当性チェックの結果を返す
【バインドのイメージ】 【注意事項】 モデルのインスタンス1つについて、1つのBinderを結び付けをします。 ですので、同じモデルクラスを操作するときも、インスタンスが違う場合は新しくBinderを作成して行います。
Webにおけるバインドとは 上記で一般的なバインド処理について見ましたが、WEBにおけるバインドは何か違うのでしょうか? 大きな違いは、リクエストオブジェクトをバインドするということです。 上の図では、"太郎"という文字列をBinderに渡していますが、WEB用のBinderにはリクエストオブジェクトをそのまま渡します。 あとは、WEB用のBinderがうまくやってくれます。 【WEBのバインドに必要なこと (設計上要求されること)】 WEBでリクエストパラメタをモデルに設定するとき、指定のリクエストパラメタ以外は無視する機能が必要です。 悪意のあるユーザが予期せぬパラメタを送り込んできて、自由にモデルの値を変更できるとまずいからです。 セキュリティホールになってしまいます。 【DAOに必要なこと (設計上要求されること)】 ORマッピングのフレームワークでは、モデルの値(プロパティ)をそのまますべてDBに書き込むのが普通です。 つまり、「同じクラスをDBに保存するのに、画面毎にSQLを別々に作る」 ということはあまりしません。 不必要にSQL文が増え、開発効率がおちるからです。 ですのでSpringに限らず、一般的に、DBを更新するときは、DBから現状の値(データオブジェクト)を取得して、 更新するプロパティだけ設定し、再度DAOに渡します。(もちろんケースにもよります)
Spring のBinderは上記2つの必要事項を満たします。 このように、Springのバインドは、セキュリティとDaoの両方にとって要求される事項を満たしています。
Created Date: 2012/04/07 |