- - PR -
MVCのうまい連携について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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でモデルをリクエストから判別し、 インスタンスを作るときどうされてますか? 是非ご意見ください。 | ||||||||
|
投稿日時: 2007-06-29 00:56
素直にStruts等のフレームワークを使っています。
いまさら生のServletを触るのは、独自のフレームワークを作成するか、 HTTPベースの通信アプリを作成するくらいしか思いつきませんね。 | ||||||||
|
投稿日時: 2007-06-29 00:58
GoFのAbstractFactoryパターンでは? | ||||||||
|
投稿日時: 2007-06-29 01:27
かつのり様>
なるほど。やっぱり皆様はどうされてますか?っていわれてもStrutsです。 てなるでしょうね^^; どこぞのWebページにStrutsはControllerを自動で生成みたいな事が 書かれてあったので、それを使うのがやっぱ早そうですね。 有名なEclipseとかでもControllerを自動で生成とやらができるのか調べてみようかと 思います。 それで自動で生成されたControllerを見るのが早いですね。 なんと言うか半分趣味みたいなものあるので、おもしろいパターンあるよ なんてのがあればお聞かせ願いたいですね。 未記入様> GoF本ですか。 GoF本はまだ読んでないので、ちょっとわかりませんが、 PHPのMVCの私のモデルはPHPによるWebアプリケーションスーパサンプル応用編ですね。 あんな感じでコントローラを作れたら楽なのになぁと思っています。 | ||||||||
|
投稿日時: 2007-06-29 01:53
同意。 ただ、いきなりStruts などのフレームワーク使ってしまうと、Servlet の基礎がわからなくなってしまうので、最初は生のServlet から始めるのはいいことだと思います。 それはともかく、
ひょっとして、Contoller を1つで済ませようとしてますか? まずは、1つのjsp に対応するServlet + model という形から開始されてはいかがでしょう? これだと、画面毎にServlet が増えていくことになりますが、じゃあ、そういう不便さをどう解消するか、というところでフレームワークの使用を検討する方がいいです。 フレームワークもたくさんあるので、「単に一番目に付くから」という理由だけでstruts を採用されたり、「最新だから」という理由でJSF を使用されたりするのはお勧めできません。ニーズにあったフレームワークを検討するといいです。 | ||||||||
|
投稿日時: 2007-06-29 07:42
XMLでインジェクションさせればいいけど。
if (〜) {} と書くぐらいならね | ||||||||
|
投稿日時: 2007-06-29 09:56
Class.forName()を使えば変数のなかみからインスタンスを作れます。
それにInterfaceを使って、コマンド名からFlyweight。 | ||||||||
|
投稿日時: 2007-06-29 11:04
世の中のフレームワークでは、xmlなどでURLとModelのマッピングを記述して、
Controllerがそのxmlを参照してマッピングを実施するようになっていますね。 これと同様の仕組みを作りたい場合、javaのリフレクション機能を利用します。 mio氏がおっしゃってるClass.forName()はその一端ですね。 パッケージとしてはjava.lang.reflectパッケージとなります。 Classクラスはjava.langにありますが例外です。 |