03.基本概念:バインダー(Binder)とは
概要
ここでは、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