- PR -

Strutsでの入力値Checkをどこでやるのが効率的か?

1
投稿者投稿内容
Tom
常連さん
会議室デビュー日: 2004/06/07
投稿数: 23
お住まい・勤務地: 東京都
投稿日時: 2004-06-07 11:01
こんにちは、Tomです。

最近、Strutsを始めて疑問に思ったのですが
Strutsでの入力値Checkをどこでやるのが効率的なのでしょう?

自分は最初は各書籍やサイトなどにあるようにActionFormのvalidateメソッドや
Validatorなど使っていましたが、少し複雑なCheck
例えばDBにアクセスしてCheckし取り出したレコードをActionでそのまま使うような場合
ActionFormとActionで2度DBにアクセスすることになり無駄がでてしまいます。

かといって特殊なケースだけActionでCheckするのでは後々、
保守するのが面倒な気がするのですが(入力ルール変更時に
FormとActionを両方修正もしくはコードをみないといけなくなるので・・・)
皆さんはどう思いますか?

自分のなかでは全ての入力値CheckをActionにて行うほうがいいような気がしますが
(ValidatorのJavascriptのチェックができなくなるのが痛いですが・・・)
それはそれで問題があるよという意見のあるかたはご指摘ください。



山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2004-06-07 12:06
堅牢なシステムを作る必要があるのであれば(多くの場合そうですが) JavaScript だけのチェックでは足りません。
技術上 JavaScript のチェックをせずリクエストを送ることはかなり容易ですので。
DB にアクセスが必要な検証については、確かに実装箇所として意見の分かれるところですね。
2度DBにアクセスすること自体はコネクションプールやエンティティBeanのキャッシュを使っていれば特別無駄になるとは思いません。

私の場合は関心事を分離する意味で、ActionForm 単体で検証できる内容については validate メソッドにて行います。
また DB と照らし合わせて他のデータとの整合性チェックを行う必要があれば Action か、またはひとまとまりのビジネスロジックとして EJB(Stateless Session Bean) に実装します。
msz193
会議室デビュー日: 2003/11/10
投稿数: 6
投稿日時: 2004-06-07 15:29
はじめまして。
私もこの度、Strutsでの初開発の為、様々な技術情報を検証しております。

明確な答えになっていないかもですが、
初期のWEBページを表示後、何かしらのボタン押下時チェックであれば、
初期のWEBページを表示する時にチェック対象のデータもhiddenで保持しておくというのはいかがなものでしょうか?
ダサイと言われればそれまでですが・・・
EJBも一つの手だと思われます。
Tom
常連さん
会議室デビュー日: 2004/06/07
投稿数: 23
お住まい・勤務地: 東京都
投稿日時: 2004-06-08 09:46
引用:
--------------------------------------------------------------------------------
私の場合は関心事を分離する意味で、ActionForm 単体で検証できる内容については
validate メソッドにて行います。
また DB と照らし合わせて他のデータとの整合性チェックを行う必要があれば Action
か、またはひとまとまりのビジネスロジックとして EJB(Stateless Session Bean)
に実装します。
--------------------------------------------------------------------------------
やはり、このやり方が一般的みたいですね。
うまくいえないのですがActionFormではnull値やLengthなど入力値の外見的な検証で
Actionでは入力値のデータの内容としての検証(内面的なもの)みたいに分けたほうが
いいのかもしれませんね。
個人的には検証は一箇所でやるほうがいいとおもいますが
チームで開発するとなると一人だけ変わったことすると保守が大変なので・・・

hiddenも小さなデータでなおかつ外部に見えてもいいような情報なら使えるのですが
大きなテーブルや認証チェックなどでは使えないのであるところではhiddenを使い
違うところでは使わないみたいなことは後で他の人が編集する時など
コードに一貫性がないと迷惑がかかるかなともおもいます。

msz193
会議室デビュー日: 2003/11/10
投稿数: 6
投稿日時: 2004-06-08 11:08
hiddenと一言で言っちゃいましたが、認証Beanと業務固有データBeanを
セッションオブジェクトで保持しておけば処理の集約化も可能なのでは無いでしょうか?

EJBは熟知していない関係であまり多用しないようにしているからか、
私は常にこの様に設計してしまいがちです。
後、Strutsではこれがベターだ!という作りもいまいち掴みかねております。
# いままで全て手作り(オープンソースが許されない環境)ばかりでしたので・・・

とりあえず解決されることを願っております。
msz193
会議室デビュー日: 2003/11/10
投稿数: 6
投稿日時: 2004-06-08 11:09
hiddenと一言で言っちゃいましたが、認証Beanと業務固有データBeanを
セッションオブジェクトで保持しておけば処理の集約化も可能なのでは無いでしょうか?

EJBは熟知していない関係であまり多用しないようにしているからか、
私は常にこの様に設計してしまいがちです。
後、Strutsではこれがベターだ!という作りもいまいち掴みかねております。
# いままで全て手作り(オープンソースが許されない環境)ばかりでしたので・・・

とりあえず解決されることを願っております。
1

スキルアップ/キャリアアップ(JOB@IT)