![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Javaを習い始めた者です。
MVCモデルでのサーブレットのやるべきことが、いまいちつかめないので質問させていただきます。
私が思っているサーブレットのすることは、
(1)送られてきたた情報をgetParameter()する。
(2)JavaBeanを生成したり、getAttribute()する。
(3)getParameter()したものをJavaBeanにsetする。
(4)JavaBean内のメソッドを実行する。
(5)JavaBeanをsetAttribute()する。
(6)別のJSPなどにfoward()する。
です。
(基本的に計算や比較などの処理は、サーブレット上では行わず、JavaBean内のメソッドで行う)
この考え方は間違っていますか?
あと例えば、ログイン認証のプログラムを作るとき、上の考え方だと、getParameter()したIdとPasswordをJavaBeanにsetして、JavaBean内のメソッドで、setしたIdを元にDBからPasswordをgetしてきます。そしてこのPasswordと、setしたPasswordを比較することになると思います。
でも、私的にはJavaBean内のメソッドで、引数にgetParameter()したIdを与えて、DBからgetしたPasswordを戻り値にします。そしてサーブレット上で、このPasswordとgetParameter()したPasswordを比較しようと思いました。
でもこれだと、サーブレット上でPasswordを比較するという処理を行っているのでMVCモデルに反しているのでしょうか?
わかりにくい説明で申し訳ないのですが、教えてください。
お願いします。
No.2ベストアンサー
- 回答日時:
貴方の考え方であっています。
よって、Servlet内でパスワードを比較するのはMVC的にはNGです。MVCで重要なのは、ModelはControllerを知らなくても動作するってことです。MVCに乗っ取ってパスワード比較を実装すると、Servletのない環境でもそのModelを利用してパスワード比較することができます。逆に言うと、それができないような設計になってる場合はMVCじゃないってことです。
No.1
- 回答日時:
提示された状況のみで判断するとMVCモデルのシステムデザインからは反しています。
しかしながらここでMVCモデルの哲学を語ってもなかなか理解し難いでしょうし
そもそもアプリケーション設計者の意図によりモデル層の区分けには
若干ならが差異が発生します。
しかしながら、今回の場合「パスワードを比較する」といった
アクションはやはりビジネスロジックでありコントローラ層が担う内容ではありません。
その呼び出し自体はコントローラ層にあってもよいかもしれませんが。
強引な気もしますが、今回のような場合だと
・データを扱う→モデル層
・呼び出すクラスを決定し実行する→コントローラ層
というくらいにざっくり考えてしまったほうがよいかもしれません。
どちらにも属さないようなものがでてきた場合に再度質問してみるか
自分なりに実装してみるとよいです。
デザインポリシーに反していると、大抵の場合融通がきかなかったり実装しにくかったりします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php エラー 2 2022/10/23 16:43
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Java 問題作成のWebアプリの作り方を教えてください 1 2022/11/26 22:01
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本の教育って時間が無い中で...
-
エクセルVBAで、条件に一致する...
-
コマンドプロンプト実行後に画...
-
DataGridViewの行追加について。
-
現在、ASP.NET(言語:VB.NET)...
-
System.load() と System.loa...
-
Refreshメソッドの使い方
-
タグチメソッドと実験計画法の違い
-
JAVAによるDB接続(JDBC)
-
AdapterView<?> parent この部...
-
【sendkeysメソッドが動かずに...
-
C#の動的キャスト
-
drawStringで文字間隔の調整
-
エクセルVBAにおけるON TIMEメ...
-
関数とメソッドの違い
-
ExcelVBAのプログラムをJavaへ変換
-
VBA コピーが出来ません…!
-
final修飾子を使っているのに、...
-
「初心者です」-Xlint: depreca...
-
vbaエクセルマクロ RemoveDupli...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
final修飾子を使っているのに、...
-
JSPで<SELECT>の中にDBから持っ...
-
Labelコントロールに数字を代入...
-
エクセルVBAにおけるON TIMEメ...
-
javascriptからjavaを呼び出したい
-
DataGridViewでセルクリックイ...
-
VBPをダブルクリックするとたま...
-
onClickで関数呼出し後に、結果...
-
コマンドプロンプト実行後に画...
-
配列のメソッド
-
日本の教育って時間が無い中で...
-
Refreshメソッドの使い方
-
mainメソッドのthrows節で設定...
-
【sendkeysメソッドが動かずに...
-
C# 演算 最大値 最小値 表現の仕方
-
VBA コピーが出来ません…!
-
Application.Wait の参照設定
-
ウィンドウを最前面にできません
-
for文(拡張)内の変数(ローカ...
おすすめ情報