Java Spring Frameworkを語るスレ
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG乱立するフレームワークと競合するプロトコルの嵐のなかで、
リスクの高い決断を余儀なくされているJavaデベロッパ、プ
ロジェクトマネージャに対する福音です。
語るべし。
0255デフォルトの名無しさん
NGNG毎回すべてをテストすることは難しいし。
0256デフォルトの名無しさん
NGNGANTやMavenでプロジェクトに組み込んでしまえば
自動でやってくれるじゃん。
0257デフォルトの名無しさん
NGNGテストを自分で作らないかぎりは、自動でテストしてくれない。
0258デフォルトの名無しさん
NGNG0259デフォルトの名無しさん
NGNGSpringIDEが、それぐらい、やってくれるんじゃないの。
0260デフォルトの名無しさん
NGNGというかやらない馬鹿もいるわけで。でも馬鹿でもコンパイルだけはする。
0261デフォルトの名無しさん
NGNGつまらんテスト仕様書を書く(しかもExcelで!)
よりテストコードを書くほうが楽しいと思わないか?
細かい修正のリリースの度に
テスト仕様書に則ってテストするのは
本来ならあたりまえの作業のはずなんだが
殆ど真面目に実行されていない。
テスト仕様書なんか納品前にでっち上げられる始末。
(銀行の勘定系とかはちゃんとやるけど)
それがmake(の相当品)に組み込まれているなら
便利だと思わないか?
0262デフォルトの名無しさん
NGNG> 細かい修正のリリースの度に
> テスト仕様書に則ってテストするのは
> 本来ならあたりまえの作業のはずなんだが
> 殆ど真面目に実行されていない。
細かいメソッド作成の度に
テストファーストに則ってテストを作成するのは
本来ならあたりまえの作業のはずなんだが
殆ど真面目に実行されていない。
というのと違いはあるのかな?
0263デフォルトの名無しさん
NGNG目視テストでは修正リリース時に毎回再実施のコストがかかる。
「真面目に実行」されていないのはリソース不足が理由。
自動テストでは上記の再実施のコストは激減する。
「真面目に実行」されないケースは開発者のスキル不足と
腐敗アーキテクチャが理由。
以上。
0264デフォルトの名無しさん
NGNG> 自動テストでは上記の再実施のコストは激減する。
再実施のコストが激減しても、テスト初回のコストは激増するわけだろ。
> 「真面目に実行」されないケースは開発者のスキル不足と
> 腐敗アーキテクチャが理由。
これが通常のテストに当てはまらない理由と
> 目視テストでは修正リリース時に毎回再実施のコストがかかる。
> 「真面目に実行」されていないのはリソース不足が理由。
これがテストファーストに当てはまらない理由を教えてもらいたい。
0265デフォルトの名無しさん
NGNG俺もそう思わんでも無いけど、そう思うのは自分の技能不足だということに気づいた今日この頃
0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNGチーム全員、すべてのプロジェクトで徹底するのが難しいんだよ。
0268デフォルトの名無しさん
NGNGつまり、ユニットテストというのは、個人の能力に依存することになるんだよね。
で、ユニットテストに依存するということは、チームの個々人の能力に依存することになる。
安定して開発するための一般的な手法としては、テストファーストはお勧めできない。
0269デフォルトの名無しさん
NGNG0270デフォルトの名無しさん
NGNG典型的な請負DQNシステムの場合、そういう余剰な工数ってどこから
捻出できるの?
0271デフォルトの名無しさん
NGNG確かにのびるが、2倍の200%ではなくて、115%くらいになるそうだ。でその15%分、
品質が15%あがるらしい。どうやって計ったのかは知らない。
0272デフォルトの名無しさん
NGNG0273デフォルトの名無しさん
NGNG二人いるなら二人分の金がかかる(奴隷でない限り)。
で二人で一緒に仕事すると、一人で別々にやる場合と比べて生産性が半分になりそうな
ので、費用も倍になりそうだという話じゃないか?
実際には別々にやった時と同じくらいの生産性を(つまり二人で二人分)を出す(らしい)と
いうことなんだが。
まあほんとかどうかは知らない。
0274デフォルトの名無しさん
NGNGデータベースからとってきた値をJSPに流し込むのって、ただの作業だし。
0275デフォルトの名無しさん
NGNG> で二人で一緒に仕事すると、一人で別々にやる場合と比べて生産性が半分になりそうな
> ので、費用も倍になりそうだという話じゃないか?
そうそう、そういいたかったんだ。ありがとう。
0276デフォルトの名無しさん
NGNGそれはユニットテストだのTDDだの以前に、
きちんとバグのないソフト作るとか、きちんとテストできるとか、きちんとデバッグできるだとか、
ある程度個人の能力に依存するのは当然だと思うぞ。
100人の人間がいて、100人とも皆が同じ答えを出すっていうのは人間じゃないぞ。
0277デフォルトの名無しさん
NGNGコンパイラでチェックできるのなら、100人の人間がいて、コンパイルに通っていれば、100人とも皆が書いたコードがチェックに通っている。
0278デフォルトの名無しさん
NGNGコンパイラで型チェックさせるなんて意味あんのか、別の方法でチェックしても
いいじゃん、という話だったんじゃないか?
おれは>>260と同じ理由で価値があると思ってるけど。
0279デフォルトの名無しさん
NGNGコア部分はDIコンテナなんだね。MBeanで定義した各サービスをDIコンテナを使って依存性注入したり
独自のサービスをMBean化して公開出来るようになるらしい
記事には書いてなかったけど、そのDIコンテナってSpringを使ってるそうだし
今後は、APサーバーがDIコンテナを核として構築されるのが主流になっていくのだろうか
0280デフォルトの名無しさん
NGNGGBeanという形でFactoryを隠すことで、コンポーネントの利用者はサービスのみを享受できる。
サービスを提供したいのに、サービスを利用する準備から伝えないといけないのは、提供側も利用側もめんどくさい。
DIコンテナがあれば、提供者が好き勝手にFactoryを準備できる。
来年からやるプロジェクトではぜったいDIコンテナ使う。
S2よりはSpringだな。
0281デフォルトの名無しさん
NGNG内部がSpringって、あのAOPが自分のインスタンスメソッド呼び出しには適用されない問題は
大丈夫なのかな。(クラスAのset.*にaspectを適用したら、最初に呼び出したsetHogeには
Aspectが適用されるけど、setHogeからthis.setHageを呼んだらAspectが適用されない問題)
実装の仕方みて「あーなるほどこりゃ自分で自分のメソッド呼んだら適用されないなー」と
思いはしたが、AOP的には困ったもんなのでまじなんとかしてほしい。
0282デフォルトの名無しさん
NGNGするかな?
0283デフォルトの名無しさん
NGNG動かない(ことがある)ってことわかってるか?
0284デフォルトの名無しさん
NGNGGeronimoはAOPは標準では提供しないらしいよ。コアに持っているのはあくまでDIコンテナで
AOPについては既存のものがGBean対応してくれるのを期待してるらしいね
AOPをコアに置いているJBossとは考え方が違うのかな?
0285デフォルトの名無しさん
NGNGでも、ログが重要なのって、オブジェクトの入り口のメソッドだから、急いで対応するほど問題になってないんじゃない?
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
05/02/15 01:33:40そんなさ、余計にバグ増やしてるようなもんじゃん。
補完も出来ないし面倒なだけだ。
0288デフォルトの名無しさん
05/02/15 01:57:26DI Containerは便利だし使ってるけど、たしかにマッピングファイルを書くのがかなりうざい。
ある程度自動化できるとは言ってもなあ。
0289デフォルトの名無しさん
05/02/15 02:17:31Strutsタグ+α程度で。
0290デフォルトの名無しさん
05/02/15 02:38:31優れるって発想は誰からのものなんだ?
増えすぎると逆効果だぞ・・・
JAVAの世界って品質よりも名前だよな。著名な製作者が
提唱すると、何でもスタンダードになっちゃう。
0291MARU-CHAN
05/02/15 08:12:560292MARU-CHAN
05/02/15 08:14:040293MARU-CHAN
05/02/15 08:25:38ところでSpringとStrutsを使った場合ってMVCはStruts方式でEJB(トランザクション管理など)の部分をSpringでやるっていうイメージなのでしょうか?
です。すんません。
0294デフォルトの名無しさん
05/02/15 12:12:02MVCというのがどういうことか正確にわからんが、StrutsのActionとActionFormはそのまま使って、ActionServletをSpringに置き換えることになる。
HTMLフォーム→JavaオブジェクトまではStrutsに任せて、あとはSpringでって感じだな。
0295デフォルトの名無しさん
05/02/28 10:26:54予約じゃなかったから仕方ないところか。
>293
Struts はコントロールとビューだけに専念して
ロジックを POJO で記述して Spring に管理させる感じかと。
Spring 独自の MVC フレームワークもあるらしいけど
そっちってどんな感じなんですかね?
Struts の servlet API べったりな感じが
どーも Spring の POJO マンセー思想に合わない気がする。。
0296デフォルトの名無しさん
05/03/06 14:23:380297デフォルトの名無しさん
05/03/10 12:25:540298デフォルトの名無しさん
05/03/10 21:07:160299デフォルトの名無しさん
05/03/10 23:29:18私はPicoContainerの、何にでも使えるところが気に入ってます。
0300デフォルトの名無しさん
05/03/16 19:21:260301デフォルトの名無しさん
05/03/17 10:43:160302デフォルトの名無しさん
2005/04/08(金) 15:20:13http://www.javaworld.jp/jwday/session/index.html
生ロッド見に行こうかな。
0303デフォルトの名無しさん
2005/04/09(土) 00:26:06インスタンスを設定ファイルで与えられるって事がそんなにいいの?
アンチDIというより「DIってすげんだぜー」って言えるように
実は洗脳して欲しかったりする。
DIが出てきてどんな所が楽チンになったのよ?
0304デフォルトの名無しさん
2005/04/09(土) 01:12:55インターフェイス経由で操作するのは、前から言われてることだし。
0305デフォルトの名無しさん
2005/04/09(土) 01:20:32EJBを使ってみれば、以下にSpringが楽で、「ああ俺だったらEJBのこのめんどくせえ
ところ、こうするのに!」というところを見事に解決していることがわかるよ。
0306デフォルトの名無しさん
2005/04/09(土) 01:28:170307デフォルトの名無しさん
2005/04/09(土) 09:16:59EJBを使わない俺にはメリットのない話ですか?
クラスどうしの依存性が減り、シンプルになり、
ユニットテストがやりやすくなるという利点は分かるのですけど、
その代わりにXMLファイルがごちゃごちゃして手に負えなくなる。
勘違いしてる?
0308303
2005/04/09(土) 09:21:03あるレベル以上のメンバーと組むことが出来る漏れとしては、
そんなもんイラネ?
>インターフェイス経由で操作するのは、前から言われてることだし。
インターフェースは好きじゃないっス。デバッグやりにくいっス。
(あくまでDIのためにインターフェース作るのはね。プラグイン開発
とか機能要件として必要な場合はもちろん使う)
>EJBを使ってみれば、以下にSpringが楽で、「ああ俺だったらEJBのこのめんどくせえ
>ところ、こうするのに!」というところを見事に解決していることがわかるよ。
漏れもEJBはめんどくさいって思ってる。なのでHibernateつかってる。
AOPでトランザクションはいい感じだけど、DIのよさはまだわからっス。
0309デフォルトの名無しさん
2005/04/09(土) 09:23:51ハゲドウ!!
0310303
2005/04/09(土) 09:25:000311デフォルトの名無しさん
2005/04/09(土) 10:29:11インタフェース経由で作らないと、使い回しがしにくいだろ?
Spring以前の問題。
あるレベル以上のメンバーの中で、308のレベルだけ低いのか、
あるレベルというのが低いのか。
0312303
2005/04/09(土) 11:07:08かかわらずクラス設計しだいじゃないの?
上にも書いたけどインターフェース自体を否定してるわけじゃないよ。
インターフェースとImplクラスが1つずつしか作らない場合
は面倒だなーって思います。
0313デフォルトの名無しさん
2005/04/09(土) 13:39:51ファクトリをつくらなくちゃいけなくなるだろ。だって、newでインスタンス
を作っちゃうと、newしている部分は具象クラスに依存してしまうから。
なんで、ファクトリ用クラスをつくって、ファクトリ経由でオブジェクト生成する。
とここまでは誰でも実装すると思うんだよ。
で、ここでファクトリを書く方法を考えてみようや。クラスごとにファクトリを
別に書くなんて馬鹿げてる。じゃあ、インスタンス生成メソッドの引数でクラス・オブジェクト
かクラス名を引数で取ることにしよう。
じゃあ生成メソッド内で、渡されたClassに対してgetInstanceすることにしようか?
これはできない。渡されるClassは、インターフェースだろうから。
じゃあif文で、渡されたClassなりClass名なりで分岐して、具体的な生成クラスを
特定しようか。これも馬鹿げてる。クラスを追加するたびにファクトリにif文を追加
して、コンパイルし直すのか? 分かりやすい記述法で外部ファイルに記述したい
ところだ。
そういや、具象クラスを生成するときのコンストラクタに引き渡す引数はどうしよう
か。ファクトリの生成メソッドにObject[]として引き渡してもらおうか? 生成後に
setXXXX()で全部セットしてもらおうか。どっちにしても、具象クラスのコンストラクタ
なりプロパティに依存してしまうよねえ。
さあ、どう実装しようか。外部ファイルで具象オブジェクトを特定して、具象オブジェクト
生成時に内部状態の初期設定も行うファクトリだ。
そんな話を説明しているのがロッド・ジョンソンの本「J2EEシステムデザイン」。いろんな
アイデアを具体例を使って披露していく。このアイデアを実装して公開したのが
Spring Frameworkだよ。
0314デフォルトの名無しさん
2005/04/09(土) 15:18:41> 漏れもEJBはめんどくさいって思ってる。なのでHibernateつかってる。
> AOPでトランザクションはいい感じだけど、DIのよさはまだわからっス。
EJBめんどくさい→Hibernateつかってる
となるということは、「EJB = EntityBeanのみ」ってことなのか?
DI Containerが作られた契機となった問題点って、Stateless Session Beanを
つかったビジネスロジック層の作り方があまりにもめんどくさい、ってところだっ
たと思うんで、ロジック層をDIパターン以外の方法で効率よく解決できるんなら、
「DIいらね」ってことに出来ると思うけど、Hibernateではそこは解決できんよね。
Hibernateで永続化層はクリアしたとして、ロジック層のオブジェクト生成は
どうするわけ? newしてるってこと? EJBは論外として。
0315デフォルトの名無しさん
2005/04/09(土) 16:24:18上にも少し出てたけどプロジェクトメンバーの技量があまりに低い場合には
プログラム中で全てif文で分岐した方が効率がいい場合もあるかもしれない。
インターフェイスの使い方をよくわかってない人はまだ意外といる。(職場によるだろうけど)
「外部ファイルで具象ファイルを指定することにより具象ファイルを変更することが可能」というのも
それによる恩恵を受けられる環境と受けられない環境があるんじゃないだろうか。
自社システムやそれに近いぐらいに自分のところで管理しているシステムで
かつ頻繁な拡張や似たようなもの作る機会が多いなら強力だと思うけど
作って納品して終わりとか拡張がまるでなかったりしたら自分たちにとっての利点はあまりないかも。
>>311が理想だと思うけど状況次第では>>312の言うこともわかる。
俺はSpring好きだしどんどん使っていきたいと思ってるけど使ってもおいしくない状況ってのはやっぱりあるんジャマイカ。
ところでSpring in Action邦訳☆⌒ 凵\(\・∀・) まだぁ?
0316デフォルトの名無しさん
2005/04/09(土) 17:02:49DIパターンの利点がほぼなくなる。
あとは、コンテナが提供するAOP機能が使いたいかどうかだけだろう。
でもインターフェースを使ったことによる利点が出てくるのって、実は開発の
後の方(変更が入った時)なんで、最初のうちに「この開発ではインターフェース
使うほどじゃないだろ」とか判断してしまうと、後半で泣きを見ることもあるから、
先行投資としてインターフェース中心でいくんじゃないかね。
0317デフォルトの名無しさん
2005/04/09(土) 17:11:580318デフォルトの名無しさん
2005/04/09(土) 17:45:35詳しく
0319デフォルトの名無しさん
2005/04/09(土) 18:03:51るだろうけど、インスタンス生成時に依存性を注入して、すべてのプロパティが構成済みの
オブジェクトを作成するというDIパターン自体のメリットは残るだろう。
インターフェース主体でないからって、DIパターンなしだったら、
インスタンス生成→他の依存インスタンス生成(このインスタンスにも依存インスタンスがある)
→インスタンスのプロパティに依存インスタンスをセット
ってのを自前でやらないといけない。newして、関連オブジェクトをnewしまくって、関連
オブジェクトの全プロパティをセットして、で、最初にnewしたオブジェクトに関連オブジェクトを
セットしないといけない。
そんなめんどくさいこと、ファクトリでやってよ、と思わないか?
0320デフォルトの名無しさん
2005/04/09(土) 18:28:240321デフォルトの名無しさん
2005/04/09(土) 19:33:43先日迷ったあげくSpring無しで書いたんだけどいちいちnewしてセットは確かに面倒だった。
これを面倒だと思うのはある程度Springに慣れてるからだと思うけど
それ以上に苦痛だったのは後で変更が発生したときの修正が面倒そうだと思いながら書いてたからだな。
でも>>319の一番のメリットは
具象クラスが変わることで具象クラスが必要とするオブジェクトが変わってもファクトリを修正せずに対応できること
(つまりは具象クラスの差し替えのしやすさ)
じゃないのかな。
それも具象クラス差し替え時に生きてくるメリットな気がする。
俺はSpringやDIコンテナ、もちろんインターフェース多用するのも否定するつもりはないんだけど
仕事場の環境次第ではSpringわからない人もまだ多いし
>>318の言うような先行投資の効果が目に見えて出ない時も多々ある。
それを考えると設定ファイル書いたり周知したりで面倒さが前面に出てくる人がいるのもわかるな、と。
後々俺が作った物を他の人が管理することになった時にその人はSpringを知っていてくれるだろうか、
俺がこれまでにしたつもりの先行投資は最終的にプラスになるのだろうか、
とちょっと悩んで書いたのが>>315なんだ。
チラシの裏って書いた方が良かったかもな。すまん(´・ω・`)
0322303
2005/04/09(土) 20:29:45>ロジック層のオブジェクト生成はどうするわけ? newしてるってこと?
うん、newしてる。
>>315
そうだね、頻繁な拡張とかはないです。
>>316
>でもインターフェースを使ったことによる利点が出てくるのって、実は開発の
>後の方(変更が入った時)
うーん、開発後方でImplクラスを丸ごと挿げ替えるほどの変更は
ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?
あー、>>319 見て分かった。ビジネスロジック層の作り方がそもそも違うんだ。
漏れは、依存オブジェクトをプロパティ経由でセットしないデツ。なので、
ビジネスロジック層のオブジェクトの殆どが状態を持たないです。
ただね、このOOPらしくない所が良いのか悪いのかは漏れも迷ってる。
0323デフォルトの名無しさん
2005/04/09(土) 21:16:390324デフォルトの名無しさん
2005/04/09(土) 21:37:540325デフォルトの名無しさん
2005/04/09(土) 22:15:37>ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?
ただのロジック変更ならソースの修正で済むけど、対象によってロジック分岐とかだと
if instanceof else if〜 で分岐するのは全くエレガントじゃないから
Strategyパターンにしたほうが後々いいでしょ、って事だな。
拡張性とか関係ない部分ならいいかもしんないけど。
0326デフォルトの名無しさん
2005/04/10(日) 00:22:16いつまでも独学は不安なので、自分の独学部分が正しいか
検証することも踏まえて、なんか本を買おうと思うのですが、
・これは読め
・これは糞だから読んじゃだめ
などありましたら、ご紹介いただけますか?
0327デフォルトの名無しさん
2005/04/10(日) 00:27:43>ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?
機能追加の場合には新しい機能向けのクラス作って
条件によってどちらを使うか切り替えればわかりやすいと思う。
また、別のユーザー向けに似たようなシステム作る時には
クラスごと差し替えることができればとても楽。
>漏れは、依存オブジェクトをプロパティ経由でセットしないデツ
引数で渡してるの?
インターフェース使わないならそれでも困らないと思うけど
インターフェースで実装の切り替えをするような場合には引
数がビジネスロジッククラスの実装に依存すると困るのよ。
ある実装ではこのオブジェクト使うけどこの実装では使わないとなると引数が統一できないから。
その点>>319のように依存オブジェクトを初期化時に設定ファイルで指定して
プロパティやコンストラクタでセットするようにすれば
呼び出し側からは実装の違いを全く意識する必要がないことになる。
0328デフォルトの名無しさん
2005/04/10(日) 01:11:57俺はPMの立場で実装はやらないが、コードレビューする程度。
結論は、SpringにするかはともかくIoCコンテナなしの開発は、もう考えられない。
最初にかならず行っていた低レイヤー部分のフレームワーク作りをしなくて済むのだから。
いつもなら、実装がぶれるのが嫌で、最初のうちに低レイヤーのフレームワークを作ってから
プログラマに渡していた。
最初にこう書くべきだというサンプルを見せてやれば、
newbieでもそこそこのものを書き上げてくれる。
Springのソースを読んでて、interfaceは多重継承できることを初めて知った。
Javaには自信を持ってたのに、自分に少しがっかりした。
0329デフォルトの名無しさん
2005/04/10(日) 02:32:31>>313にも出てるけど、ロッド・ジョンソンの「J2EEシステムデザイン」はお勧めできる。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797322888/250-2144330-3153039
DI(あるいはIoC)コンテナ登場前夜に、EJBの問題点を詳細に書き表して、なおかつ
解決するための方法論を具体的なコードを交えて説明した名作だ。この本で紹介された
アイデアがそのまんまSpring Frameworkの基礎になってる事は有名。AOPの実現方法ま
でおんなじだし、Springの解説書か?と思えるほど。
まあロッド・ジョンソンがSpringの開発者なわけであたりまえなんだろうけど。
一方読む必要がないのは、「Java ブループリント」だな。人生を無駄遣いする事になる。
0330デフォルトの名無しさん
2005/04/10(日) 02:53:18そう、それだ。
エンタープライズ向け開発だと、いろんな技術レベルの人間があつまるから、かならず
基礎アーキテクチャを技術レベルが高い人間で実装するよな。
つまり技術レベルの低い人でも、決められた実装方法に従って普通のJavaプログラムと
して作れば、あとは基礎アーキテクチャが何とかするよ、という状態を作るわけだ。
そういうものの大部分って、ロジック層のシングルトン・オブジェクトをどうやって生成するか
とか、初期化を間違わないにはどうしたらいいかとか、EJBを取得するのにJNDI参照したり
RemoteExceptionを処理し忘れたりしないようにするにはどうしたらいいか、とか、
めんどくさいことばっかりなんだよな。
Springはそういうものの大部分を吸収してくれるし、EJBの利点の一つ、宣言的トランザクション
もサポートしてる。
正直、リモート呼び出しの必要性が無ければEJBを使う意味を見いだせない。
0331デフォルトの名無しさん
2005/04/10(日) 03:25:34ふまえとかないと、なんで「Spring楽だー」という輩がいるのか理解できなくて、>>307のような
感想になっても仕方がないと思う。
>>307
>その代わりにXMLファイルがごちゃごちゃして手に負えなくなる。
EJBのディプロイメント・ディスクリプタというXMLファイルは、SpringのXML定義の10倍は
ごちゃごちゃしてて手に負えないんですよ。Springの構成ファイルは分かりやすいよ。
しかも構成ファイル一つでリモート呼び出しを除くEJBの機能を実現できるんだったら、
EJBに苦しめられた輩が採用しない理由はないよ。
0332デフォルトの名無しさん
2005/04/10(日) 03:39:210333デフォルトの名無しさん
2005/04/10(日) 03:46:18r-、' ´ `ヽr-、
ィ7 /l: ハヽハ トヾ 駄スレを保守することは、この俺が許さん!
'|l |'´_` ´_ `| || 信念に基づいて行動する。
| |´ヒ} ヒ}`! l| それを人は正義と言う。
__ノ゙). 从 l, _'_. |从 今俺が行ってることは、荒らしではない。
,_'(_ ノ_ヽ ヾl.> - ,イ;リ 正義という名の粛清だぁ!
{ f:テ} {'f:テ}',/\ヽ--//ヽ
ヽ,r─‐ 、ィ .、、 i l>Y<! i '、 バーニング!
/ iゝ_ノ iヽ /l |l l ',
lンヽ/ムノじ
0334デフォルトの名無しさん
2005/04/10(日) 08:58:20Webじゃない普通のアプリについてはどう思ってるか教えて欲しい
0335328
2005/04/10(日) 10:12:52今回は、通常のアプリとWebアプリとどちらでもSpringを使った。
Webアプリのほうが制約があり、通常のアプリのほうがより自由というのが回答。
Springの構成は、まず通常のJavaアプリで使えるコアがある。
optionalな形でSpring WebなどのWebアプリ用サポートがある。
Springは、BeanFactoryという汎用のファクトリに識別子を渡して生成してもらうのだが、
このファクトリのインスタンスをどこかに保存しておく必要がある。
保存しない場合は、ファクトリのインスタンスを毎回newする必要が出てくる。
これは毎回設定を解釈するというコストをかけることとイコールだ。
で、通常のアプリならメインクラスのメンバにでも入れておけばよい。
これがWebアプリだと、applicationスコープのアトリビュートに放り込むことになる。
BeanFactoryのアトリビュートへの設定と取り出しを管理するクラス自体は、Spring組み込みで提供されてる。
しかしServletContextを使える場所でしかBeanFactoryを取得できないという制約が生まれる。
ちゃんとクラス設計していれば問題は生じないけど、
ちょっと工夫してあげなきゃならない場面もでてくる。
まああれだ。たぶん大丈夫だよ。
心配なら一度ファクトリ部分のソースを追って、中身を確認したらどうだろう。
変な制約はないし、シンプルで、不安は生まれないと思う。
0337デフォルトの名無しさん
2005/04/11(月) 02:58:25を邦訳してほしいな。「J2EEシステムデザイン」の続編みたいな本だ。
0338デフォルトの名無しさん
2005/04/11(月) 15:20:29>>335の
> BeanFactoryのアトリビュートへの設定と取り出しを管理するクラス自体は、Spring組み込みで提供されてる。
> しかしServletContextを使える場所でしかBeanFactoryを取得できないという制約が生まれる。
ServletContext sContext = getServlet().getServletContext();
ApplicationContext aContext =
(ApplicationContext)sContext.getAttribute("org.springframework.web.struts.ContextLoaderPlugIn.CONTEXT.");
0339デフォルトの名無しさん
2005/04/11(月) 15:24:27>>335の
> BeanFactoryのアトリビュートへの設定と取り出しを管理するクラス自体は、Spring組み込みで提供されてる。
> しかしServletContextを使える場所でしかBeanFactoryを取得できないという制約が生まれる。
は、ApplicationContextを指していると思うんですけど、ApplicationContextの取り出しは、
>>338に書いたように、ServletContextから、↓の名前のクラスで埋められている、オブジェクトを取り出すんでOK?
「org.springframework.web.struts.ContextLoaderPlugIn.CONTEXT.」
それとも、ApplicationContextを取り出すには、こうする見たいなのってあるの?
0340デフォルトの名無しさん
2005/04/11(月) 16:10:43俺はこうしてるよ。
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);
0341デフォルトの名無しさん
2005/04/11(月) 16:33:05素早い回答サンクス!!!
やっぱり、ユーティリティはあったのね。
0342デフォルトの名無しさん
2005/04/11(月) 22:03:140343デフォルトの名無しさん
2005/04/11(月) 22:42:10これならServletContext無くても取れるんだけども。
package util;
public final class BeanFactoryHolder implements BeanFactoryAware {
private static final BeanFactoryHolder HOLDER = new BeanFactoryHolder();
public static BeanFactoryHolder getHolderInstance() { return HOLDER; }
public static BeanFactory getBeanFactory() { return HOLDER.beanFactory; }
private BeanFactory beanFactory;
private BeanFactoryHolder() { }
public void setBeanFactory(BeanFactory bf) {
if (beanFactory != null) {
throw new IllegalStateException("beanFactory already exists");
}
beanFactory = bf;
}
}
<bean id="beanFactoryHolder" class="util.BeanFactoryHolder" factory-method="getHolderInstance"/>
0344デフォルトの名無しさん
2005/04/12(火) 01:37:15裏を返せば不適当ということ。
util.BeanFactoryHolderクラスは、
Servletコンテナに100個のWebアプリがディプロイされていても、
そのうちの1個でしか使えない。
もしくは、100個のWebアプリ間で1個のBeanFactoryを共有する。
0345303
2005/04/13(水) 01:02:58上に出てきた本も読んでみます。
現状の漏れの考えは、
1.ビジネスロジックに再利用性は殆ど感じない(あるとしたら
ライブラリとかユーティリティ系)。
2.業務要件として拡張性が求められている箇所は、自分で
ファクトリを作らないでDIコンテナを利用するのは良いかも。
3.本読んだらかわるかも。
おまけ
EJBで作られたビジネスロジックのコンポーネントは殆ど見たことない
んだけど、それってEJBがめんどいからでは無くってやっぱり
ビジネスロジックに再利用性が無いからじゃないかなって、
思いまふ(UI系は除いて)。
beaが頑張ってる気もするけど、beaでこの程度かと。。。
0346デフォルトの名無しさん
2005/04/13(水) 01:46:12業務上の変更に耐えられるようにするためだよ。
EJBはほっといてもインターフェース中心になるんだけど、一つのオブジェクトに
対して4つのインターフェースが必要だったりして馬鹿くさいので誰もやらんのだ
と思うけど。
おれもトランザクション・スクリプトというか、関数プログラミング的に作っても
追いつくときは、極端にstaticメソッドだけでビジネスロジックを組んだこともある。
でもドメインモデルみたいに、各ビジネスロジック・オブジェクトが他のオブジェクト
と結びつき合ってる場合だと、業務の変更に対応する場合に、クラス構成を変えた
ほうが早いという場合もあるよ。
「請求書サービス」を「請求書サービス」と「売掛統計サービス」と「台帳サービス」
の三つに分解して、請求サービスのデータ登録メソッドを呼び出したら統計と
台帳も更新するように変えたって、請求書サービスのインターフェースがかわら
なければコントローラに影響を与えない。
逆に、オブジェクトが互いに依存し合ったドメインモデルのようなものを作らない
なら、別段困らないようにも思う。
0347デフォルトの名無しさん
2005/04/18(月) 21:27:230348デフォルトの名無しさん
2005/04/18(月) 23:07:170349デフォルトの名無しさん
2005/04/18(月) 23:27:430350デフォルトの名無しさん
2005/04/19(火) 09:09:14iBATIS との連携について書いてあったのがわりと新鮮だった感じ。
(もちろん Hibernate との連携も抑えてあった。)
Spring in Action の方が読み応えありそうなので
そっちを最初に片付けようと思ってる。
0351デフォルトの名無しさん
2005/04/19(火) 22:02:23入門書という位置づけのようだが、定義ファイルに関する説明が
一覧表ですまされていたりするので、本当に初めての人がこの本で
Springを使えるようになるのかはちょっと疑問。
ApplicationContextのメッセージソースやイベントの説明はあるのに
FactoryBeanの説明がないっていうのは妥当な判断だろうか?
AOPも定義ファイルに書く使い方の前にProxyFactoryを直接使った例で
説明する意味はあるのだろうか?
DIとAOPという一番ベーシックな部分の説明が弱いのが入門書としては
難点だと思う。といって応用的な話があるわけでもなく…
0352デフォルトの名無しさん
2005/04/19(火) 22:48:59サンキュ
Seasar2をちょっと触ってみたぐらいの俺だけど、Spring in Actionを買ってみます
0353デフォルトの名無しさん
2005/04/19(火) 22:54:31内容はおいといて、文章は少しウザイ。
0354デフォルトの名無しさん
2005/04/20(水) 17:55:55■ このスレッドは過去ログ倉庫に格納されています