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