- ベストアンサー
MVCモデルでのサーブレットのやること
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モデルに反しているのでしょうか? わかりにくい説明で申し訳ないのですが、教えてください。 お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
貴方の考え方であっています。よって、Servlet内でパスワードを比較するのはMVC的にはNGです。 MVCで重要なのは、ModelはControllerを知らなくても動作するってことです。MVCに乗っ取ってパスワード比較を実装すると、Servletのない環境でもそのModelを利用してパスワード比較することができます。逆に言うと、それができないような設計になってる場合はMVCじゃないってことです。
その他の回答 (1)
- momozange
- ベストアンサー率67% (21/31)
提示された状況のみで判断するとMVCモデルのシステムデザインからは反しています。 しかしながらここでMVCモデルの哲学を語ってもなかなか理解し難いでしょうし そもそもアプリケーション設計者の意図によりモデル層の区分けには 若干ならが差異が発生します。 しかしながら、今回の場合「パスワードを比較する」といった アクションはやはりビジネスロジックでありコントローラ層が担う内容ではありません。 その呼び出し自体はコントローラ層にあってもよいかもしれませんが。 強引な気もしますが、今回のような場合だと ・データを扱う→モデル層 ・呼び出すクラスを決定し実行する→コントローラ層 というくらいにざっくり考えてしまったほうがよいかもしれません。 どちらにも属さないようなものがでてきた場合に再度質問してみるか 自分なりに実装してみるとよいです。 デザインポリシーに反していると、大抵の場合融通がきかなかったり実装しにくかったりします。
お礼
回答ありがとうございます。
お礼
回答ありがとうございます。 サーブレットでのやることが、よくわかりました。