ひがやすを技術ブログ

電通国際情報サービスのプログラマ

入力値チェックをモデルで行なう

ひがさん、こんばんは。入力値のチェックをmodel側で行うというのは、結構自然で良いと思っているのですが、ひがさんはどう思いますか?

入力値チェックをモデルで行なう方法は、今後、はやると思いますが、個人的には反対。
なぜかというと、状況によって、チェックする内容が異なるためです。
ボタンAを押したときはチェックするけど、ボタンBを押したときはチェックしないというのは、よくある話です。このようなチェックをモデルで行なおうとすると、今が、どの状況なのかということをモデルに渡す必要があります。モデルが利用する側が誰かによって条件分岐するなんてことは、美しくない。条件分岐を解消するもっとも有効な方法は、条件分岐を発生させている原因で処理を行なうことです。そうすれば分岐する必要はありません。今回のケースだと、コントローラ側(StrutsだとAction)でチェックするのです。
入力チェックというのは、状況に依存します。その状況を最も知っているのは、コントローラなので、コントローラでチェックするのが自然なのです。
SAStrutsもそういう発想で、Actionに入力チェック用のアノテーションを指定するようになっています。
http://sastruts.seasar.org/featureReference.html#Validator