- PR -

MVCのうまい連携について

投稿者投稿内容
文系
会議室デビュー日: 2007/06/29
投稿数: 3
投稿日時: 2007-06-29 00:52
はじめまして。

この度初めてServletで開発する事になったのですが、
JAVAでMVCのうまい連携って中々難しいものですね。

色々GoogleでMVC ServletやServlet 複数 model,Controller model インスタンス 生成
等などググってみても大体modelがひとつのサンプルしかないので、
いまいちControllerのうまい使い方が載ってません。

たとえばPHPなら

インスタンスを入れる変数 = new リクエストから取得(加工)したモデルを示す変数;
インスタンスを入れる変数 -> 共通のメソッド;

にする事で後からどんどんモデルが増えても極論何もせずに対応できるのですが、
servletだと、newの後を変数出来ない、変数で型を指定してキャストできないので、
どうしてもif(model.equals("***"))〜else if〜
みたいにならざるを得ない気がします。

となるといちいちモデルが増えるたびにControllerを触らないといけないですから、
ちょっときつい。

java.beans.Beansのinstantiateを使用しても、
メソッドはスーパクラスのメソッドやjava.beans.Beansのインスタンスのメソッド等
しか使えないため、コンストラクタにメソッドをぶち込む・・・
いやそれはないだろうと思ってます。

皆様はひとつのControllerでモデルをリクエストから判別し、
インスタンスを作るときどうされてますか?

是非ご意見ください。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-06-29 00:56
素直にStruts等のフレームワークを使っています。
いまさら生のServletを触るのは、独自のフレームワークを作成するか、
HTTPベースの通信アプリを作成するくらいしか思いつきませんね。
未記入
会議室デビュー日: 2007/02/05
投稿数: 4
投稿日時: 2007-06-29 00:58
引用:

インスタンスを入れる変数 = new リクエストから取得(加工)したモデルを示す変数;
インスタンスを入れる変数 -> 共通のメソッド;


GoFのAbstractFactoryパターンでは?
文系
会議室デビュー日: 2007/06/29
投稿数: 3
投稿日時: 2007-06-29 01:27
かつのり様>
なるほど。やっぱり皆様はどうされてますか?っていわれてもStrutsです。
てなるでしょうね^^;
どこぞのWebページにStrutsはControllerを自動で生成みたいな事が
書かれてあったので、それを使うのがやっぱ早そうですね。
有名なEclipseとかでもControllerを自動で生成とやらができるのか調べてみようかと
思います。
それで自動で生成されたControllerを見るのが早いですね。

なんと言うか半分趣味みたいなものあるので、おもしろいパターンあるよ
なんてのがあればお聞かせ願いたいですね。

未記入様>
GoF本ですか。
GoF本はまだ読んでないので、ちょっとわかりませんが、
PHPのMVCの私のモデルはPHPによるWebアプリケーションスーパサンプル応用編ですね。
あんな感じでコントローラを作れたら楽なのになぁと思っています。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2007-06-29 01:53
引用:

素直にStruts等のフレームワークを使っています。
いまさら生のServletを触るのは、独自のフレームワークを作成するか、
HTTPベースの通信アプリを作成するくらいしか思いつきませんね。



同意。

ただ、いきなりStruts などのフレームワーク使ってしまうと、Servlet の基礎がわからなくなってしまうので、最初は生のServlet から始めるのはいいことだと思います。

それはともかく、

引用:

servletだと、newの後を変数出来ない、変数で型を指定してキャストできないので、
どうしてもif(model.equals("***"))〜else if〜
みたいにならざるを得ない気がします。



ひょっとして、Contoller を1つで済ませようとしてますか?
まずは、1つのjsp に対応するServlet + model という形から開始されてはいかがでしょう?
これだと、画面毎にServlet が増えていくことになりますが、じゃあ、そういう不便さをどう解消するか、というところでフレームワークの使用を検討する方がいいです。

フレームワークもたくさんあるので、「単に一番目に付くから」という理由だけでstruts を採用されたり、「最新だから」という理由でJSF を使用されたりするのはお勧めできません。ニーズにあったフレームワークを検討するといいです。



朝日奈ありす
大ベテラン
会議室デビュー日: 2007/05/02
投稿数: 189
お住まい・勤務地: 最北の地
投稿日時: 2007-06-29 07:42
XMLでインジェクションさせればいいけど。
if (〜) {} と書くぐらいならね
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-06-29 09:56
Class.forName()を使えば変数のなかみからインスタンスを作れます。
それにInterfaceを使って、コマンド名からFlyweight。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-06-29 11:04
世の中のフレームワークでは、xmlなどでURLとModelのマッピングを記述して、
Controllerがそのxmlを参照してマッピングを実施するようになっていますね。

これと同様の仕組みを作りたい場合、javaのリフレクション機能を利用します。
mio氏がおっしゃってるClass.forName()はその一端ですね。
パッケージとしてはjava.lang.reflectパッケージとなります。
Classクラスはjava.langにありますが例外です。

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