現在TOMCAT6.xにて生産管理システムの前段として在庫管理システムを開発しようとしています。雛形等は無く1から作成していこうと思っているのですが、システム全体の構造をどのようにするか結論が出ていない状況です。別の開発で行った構造をベースにしようかとも考えてもいます。プロジェクトメンバーと話し合った結果、2つに分かれました。
でも共通部分は同じ所があり、MVC構造(本来とは違うかもです)という所までは一緒です。
その2つの案とは、
(1)1つの機能毎(若しくは画面単位)に1つのコントローラー(サーブレット)を持たせ、そのサーブレットからモデルのインスタンス化及びDBへのアクセス(ここはもしかしたらマネージャークラス、若しくはDAOを持たせてそこで処理)を行ったり、結果をレスポンスするJSPを呼び出したりする方法。
(2)1つのサーブレットだけ作成し、そこからJSPを直ぐに呼び出し、JSPにてモデルやDBへアクセスしたりするDAO及びマネージャクラスの生成をし業務処理した後、そのJSP上で結果を返す方法(要はFrontControllerパターン)。
これは、今回に限らず他のシステムではどのような構造になっているのか、とても興味があります。
(1)がベストなのか(2)がベストなのか、はたまた「うちのシステムでは、こっちのほうがトレンドで用いてますよ」というご意見を頂ければ助かります。
本来なら、私が知っている限りの中で(1)と(2)のメリットとデメリットを書くべきかと思いますが、素のままのご意見をいただければと思います。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
Strutsを導入するのがベストかと思いますが、諸事情があるみたいで大変ですね。
私は(2)がお勧めです。FrontControllerパターンとView-Helperパターンを導入されてはいかがでしょうか?・FrontControllerパターンのメリットとしまして「全てのリクエストを集中管理できる」。
・View-Helperパターンのメリットとしまして「業務ロジックをビューから分離し易い」。
どちらかというと、J2EEの世界に入ってしまうのですが、では、ビジネスロジックはどうするかというと、TO(Transfer Object)を用います。
また、DBや通信等はDAOパターンで決まりです。
詳細はインターネット検索をかけると出てきますので、そちらを参考にしてみてください。
この手法以外にはGoFパターン等ありますが、私は用いたことが無いのでなんともです。
ご回答ありがとうございます。
なるほど。EJBをお勧めという事でしょうか。
検討材料としてプロジェクト内で話し合ってみます。
新たな選択肢を提供いただき、ありがとうございます。
No.3
- 回答日時:
MVC構造というのなら、(1)のほうが近いですね。
(2)では、結局JSPがコントローラの部分まで担当してしまうので、処理と画面の分離が困難になりそうです。ただ、よくあるMVCの構成では、下記のように入り口だけは(2)のようになります。
1.Controlとして、一つのサーブレットがPOSTされたデータを受けとる
2.入力ごとに適切なModelクラスを選び、データを渡して処理を行う
3.処理が済めば、JSPへフォワードする
4.Viewを構成するJSPが、表示するデータをモデルクラスから受け取り、HTMLを生成する
Coltrolは、入力に応じるべきModelと、処理結果を表示すべきViewを選び出し、呼び出すことに専念。
Modelはひたすらデータ処理に、Viewは画面表示に専念する。
Strutsなど、こうした仕組みを提供しているフレームワークを使うのがお勧めです。
ご回答ありがとうございます。
確かにその通りなのです。(2)はView部分に業務ロジック的なプログラミングを強いられます。そうなると、デザイナーとプログラマーとの喧嘩となり苦労してきた経験もあります。できればJSPには極力ロジックを載せたくないと私も思っています。
>>Strutsなど、こうした仕組みを提供しているフレームワークを使うのがお勧めです。
実は検討材料としてStrurs2を入れようかという話もあったのですが、クライアント様の担当者様がシステム開発部門にいまして、その方がサーブレット&JSPしか知らないので、かたくなにNGといってきているのです。Strutsの重宝さをプレゼンとかしたのですがダメでした><。
No.2
- 回答日時:
楽なのは(2)よね。
新しい機能を追加するときに
アプリケーションを設定しなおすわずらわしさがないわ。
ログも一箇所にまとめやすいし
とても"作り手"に都合がいいわ。
でも私なら(1)を採用する方向で持っていこうとするわ。
(1)の場合、基盤のメニューも別アプリになるとは思うし
いろいろ実装上面倒だけど
・後日追加する生産管理システムを追加しても
既存の在庫管理システムに影響がない。
*もし同じアプリケーションにした場合
万が一の不具合で両方とも止まってしまう可能性あるわ。
・別VM上での運用も容易に可能
*負荷が高い場合、考慮したいわね。
共通コンポーネントの管理や、アプリケーション間のデータのやり取りを
いろいろ考えておかないといけないけど
その点さえクリアしてしまえば"運用は"かなり楽になるわ。
また、別々にすることの利点として、
片方だけ動かして片方を使わない
なんて使い方もシンプルよね。
さらに新しい機能を追加することもやりやすいし
仕様変更による影響も片方だけになる。
大規模になるときほど分けたときの利点が大きいわ。
でも逆に小規模だともともと運用が楽なので
一緒にした方がいいかもしれないわね。
とりあえず私の意見はここまで。
ご回答ありがとうございます。
確かにその通りだと思います。
ちなみに別なシステム構造などご存知でしたら、ご教授いただけると助かります。
No.1
- 回答日時:
昔よく議論になりましたが、僕の個人的な意見としては(1)だと思います。
分散開発もしやすいし、設計書も書きやすいし。
デメリットとしては、名前空間が狭くなるとか、やたらファイルが多くなるなどですよね?
開発速度を考えると(2)と考えるかもしれませんが、よほど似た処理、
もしくは、簡単な処理の画面遷移でこうする場合はありかもしれませんが、
(1)と(2)が混在するのは良くないと思います。
ご回答ありがとうございます。
(1)ですか。私も実は機能で分離できるので平行開発というメリット部分で良いなーと思うのですが、(2)を押しているメンバーは画面管理がし易いという面と画面=機能という切り分けができて良いという意見もあります。例えば画面番号(Z01-001とか付けて)と設計書の機能番号と一致させ、機能-画面-設計書と言う形で同一管理するなんていう事ができると言っています。(1)はどちらかというと、設計書-サーブレット-JSPという管理になります。私はこちらがこのみなのですけど。んーーー難しいですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
VBScriptでのWord印刷
-
Javaについて、時間比較で処理...
-
無限ループをわざと作って時計...
-
繰り返し処理のやり方
-
C#で別スレッドの終了を知りたい
-
JavaでVBのDOEVENTSと同様の処...
-
SwingUtilities.invokeLater(ne...
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
C#でフォームのオブジェクト名...
-
JTextFieldの入力制限
-
VBA 同じ名前のオブジェクトを...
-
変数名の付け方
-
C# でメソッドに送られてきたOb...
-
河合塾のクラス分けについて
-
c++でのヘッダーファイルの循環...
-
C# インスタンスの破棄
-
Javaの問題なんですが、(this==...
-
Javaでブラウザ判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
Javaでのデバッグコード削除
-
Tomcat高負荷時の設定について
-
JavaScriptからJAVAクラスを呼...
-
[Java] while(true)の意味
-
数値の定数を付ける時
-
ラジオボタンの選択判定
-
JSP、サーブレットの初期処理
-
JavaでVBのDOEVENTSと同様の処...
-
JAVAからJAVASCRIPT関数を呼び出し
-
doGetとdoPostの違い
-
Delphiのマルチスレッドの割り...
-
C#で別スレッドの終了を知りたい
-
SwingUtilities.invokeLater(ne...
-
FocusLostでイベント処理を中断...
-
onBlurとonFocusの処理順序につ...
-
アコーディオンメニューをアン...
-
JAVAにおける画像のJPEG保存の...
-
Tomcatのスレッドを破棄する方法
-
C#でバックグラウンド処理から...
おすすめ情報