[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 08/17 14:23 / Filesize : 243 KB / Number-of Response : 892
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Java Spring Frameworkを語るスレ



1 名前:デフォルトの名無しさん mailto:sage [04/02/23 00:51]
www.springframework.org/

乱立するフレームワークと競合するプロトコルの嵐のなかで、
リスクの高い決断を余儀なくされているJavaデベロッパ、プ
ロジェクトマネージャに対する福音です。

語るべし。


263 名前:デフォルトの名無しさん mailto:sage [04/12/12 00:32:30]
>>262
目視テストでは修正リリース時に毎回再実施のコストがかかる。
「真面目に実行」されていないのはリソース不足が理由。

自動テストでは上記の再実施のコストは激減する。
「真面目に実行」されないケースは開発者のスキル不足と
腐敗アーキテクチャが理由。

以上。

264 名前:デフォルトの名無しさん mailto:sage [04/12/12 02:57:00]
>>263
> 自動テストでは上記の再実施のコストは激減する。

再実施のコストが激減しても、テスト初回のコストは激増するわけだろ。

> 「真面目に実行」されないケースは開発者のスキル不足と
> 腐敗アーキテクチャが理由。

これが通常のテストに当てはまらない理由と

> 目視テストでは修正リリース時に毎回再実施のコストがかかる。
> 「真面目に実行」されていないのはリソース不足が理由。

これがテストファーストに当てはまらない理由を教えてもらいたい。

265 名前:デフォルトの名無しさん mailto:sage [04/12/12 17:58:07]
>>255
俺もそう思わんでも無いけど、そう思うのは自分の技能不足だということに気づいた今日この頃

266 名前:デフォルトの名無しさん mailto:sage [04/12/12 17:59:42]
JUnit in Action 嫁。

267 名前:デフォルトの名無しさん mailto:sage [04/12/12 19:12:50]
>>265
チーム全員、すべてのプロジェクトで徹底するのが難しいんだよ。

268 名前:デフォルトの名無しさん mailto:sage [04/12/12 21:09:02]
>>265
つまり、ユニットテストというのは、個人の能力に依存することになるんだよね。
で、ユニットテストに依存するということは、チームの個々人の能力に依存することになる。
安定して開発するための一般的な手法としては、テストファーストはお勧めできない。

269 名前:デフォルトの名無しさん mailto:sage [04/12/13 00:10:47]
そういうことを想定してたからこそ、ペアプロって発想が出てきたんだと予想してみる。

270 名前:デフォルトの名無しさん mailto:sage [04/12/13 01:28:06]
ペアプロって人月が倍になるように見えるんだけど間違ってる?
典型的な請負DQNシステムの場合、そういう余剰な工数ってどこから
捻出できるの?

271 名前:デフォルトの名無しさん mailto:sage [04/12/13 01:49:37]
XPの本で読んだだけだけど、研究によると、ペアプロをするとコーディング時間は
確かにのびるが、2倍の200%ではなくて、115%くらいになるそうだ。でその15%分、
品質が15%あがるらしい。どうやって計ったのかは知らない。



272 名前:デフォルトの名無しさん mailto:sage [04/12/13 11:56:23]
そうじゃなくて2人分の金が必要って話になるんじゃないかってことだろ。人月だから。

273 名前:デフォルトの名無しさん mailto:sage [04/12/13 13:03:39]
二人分の金が必要なのは当たり前だ。二人いるならね。どんな手法だろうが
二人いるなら二人分の金がかかる(奴隷でない限り)。

で二人で一緒に仕事すると、一人で別々にやる場合と比べて生産性が半分になりそうな
ので、費用も倍になりそうだという話じゃないか?
実際には別々にやった時と同じくらいの生産性を(つまり二人で二人分)を出す(らしい)と
いうことなんだが。
まあほんとかどうかは知らない。

274 名前:デフォルトの名無しさん mailto:sage [04/12/13 13:20:16]
問題は、プログラムには単純作業的なものが多くて、ペアプログラミングの効率のよさが得られるところが少ないってことじゃないのかな?
データベースからとってきた値をJSPに流し込むのって、ただの作業だし。

275 名前:デフォルトの名無しさん mailto:sage [04/12/13 20:04:55]
>>273
> で二人で一緒に仕事すると、一人で別々にやる場合と比べて生産性が半分になりそうな
> ので、費用も倍になりそうだという話じゃないか?
そうそう、そういいたかったんだ。ありがとう。

276 名前:デフォルトの名無しさん mailto:sage [04/12/13 21:49:00]
>>268
それはユニットテストだのTDDだの以前に、
きちんとバグのないソフト作るとか、きちんとテストできるとか、きちんとデバッグできるだとか、
ある程度個人の能力に依存するのは当然だと思うぞ。
100人の人間がいて、100人とも皆が同じ答えを出すっていうのは人間じゃないぞ。


277 名前:デフォルトの名無しさん mailto:sage [04/12/13 22:11:52]
>>276
コンパイラでチェックできるのなら、100人の人間がいて、コンパイルに通っていれば、100人とも皆が書いたコードがチェックに通っている。

278 名前:デフォルトの名無しさん mailto:sage [04/12/13 23:48:13]
なんだかいつの間にかテストの有効性の話になってるが、もともとは、
コンパイラで型チェックさせるなんて意味あんのか、別の方法でチェックしても
いいじゃん、という話だったんじゃないか?

おれは>>260と同じ理由で価値があると思ってるけど。

279 名前:デフォルトの名無しさん [04/12/25 14:58:37]
今月のJavaWorldの記事でGeronimoの記事を読んでたんだけど
コア部分はDIコンテナなんだね。MBeanで定義した各サービスをDIコンテナを使って依存性注入したり
独自のサービスをMBean化して公開出来るようになるらしい
記事には書いてなかったけど、そのDIコンテナってSpringを使ってるそうだし
今後は、APサーバーがDIコンテナを核として構築されるのが主流になっていくのだろうか

280 名前:デフォルトの名無しさん mailto:sage [04/12/26 00:04:13]
俺様フレームワークを作るときにいつも困ってるのが「Factoryの提供の仕方」だったからな。
GBeanという形でFactoryを隠すことで、コンポーネントの利用者はサービスのみを享受できる。

サービスを提供したいのに、サービスを利用する準備から伝えないといけないのは、提供側も利用側もめんどくさい。
DIコンテナがあれば、提供者が好き勝手にFactoryを準備できる。
来年からやるプロジェクトではぜったいDIコンテナ使う。
S2よりはSpringだな。

281 名前:デフォルトの名無しさん mailto:sage [04/12/26 00:18:57]
>>279
内部がSpringって、あのAOPが自分のインスタンスメソッド呼び出しには適用されない問題は
大丈夫なのかな。(クラスAのset.*にaspectを適用したら、最初に呼び出したsetHogeには
Aspectが適用されるけど、setHogeからthis.setHageを呼んだらAspectが適用されない問題)

実装の仕方みて「あーなるほどこりゃ自分で自分のメソッド呼んだら適用されないなー」と
思いはしたが、AOP的には困ったもんなのでまじなんとかしてほしい。



282 名前:デフォルトの名無しさん mailto:sage [04/12/26 00:32:48]
一番使われるトランザクションとかログてきには、あまり困らないのでなんとかしないんじゃない?
するかな?

283 名前:デフォルトの名無しさん mailto:sage [04/12/26 00:40:09]
おい、「setなんたらというのが呼ばれたら全部ログ吐け」ってのが、ちゃんと
動かない(ことがある)ってことわかってるか?

284 名前:デフォルトの名無しさん [04/12/26 00:44:11]
>>281
GeronimoはAOPは標準では提供しないらしいよ。コアに持っているのはあくまでDIコンテナで
AOPについては既存のものがGBean対応してくれるのを期待してるらしいね
AOPをコアに置いているJBossとは考え方が違うのかな?

285 名前:デフォルトの名無しさん mailto:sage [04/12/26 01:32:44]
>>283
でも、ログが重要なのって、オブジェクトの入り口のメソッドだから、急いで対応するほど問題になってないんじゃない?

286 名前:デフォルトの名無しさん mailto:sage [05/01/06 01:32:25]
proxyタイプのAOPじゃそれが限界だろ。いやならAspectJだ

287 名前:デフォルトの名無しさん [05/02/15 01:33:40 ]
Springしかり、最近のORMしかり、マッピングファイルうざい。
そんなさ、余計にバグ増やしてるようなもんじゃん。
補完も出来ないし面倒なだけだ。

288 名前:デフォルトの名無しさん mailto:sage [05/02/15 01:57:26 ]
まあマッピングファイルがうざいということには賛成だな。
DI Containerは便利だし使ってるけど、たしかにマッピングファイルを書くのがかなりうざい。
ある程度自動化できるとは言ってもなあ。

289 名前:デフォルトの名無しさん mailto:sage [05/02/15 02:17:31 ]
今のところだいたいXDocletで書いたもので用が足るから、あまり困ってない。
Strutsタグ+α程度で。

290 名前:デフォルトの名無しさん [05/02/15 02:38:31 ]
そもそも、何でもマッピングファイルにすれば保守性、拡張性に
優れるって発想は誰からのものなんだ?
増えすぎると逆効果だぞ・・・
JAVAの世界って品質よりも名前だよな。著名な製作者が
提唱すると、何でもスタンダードになっちゃう。


291 名前:MARU-CHAN [05/02/15 08:12:56 ]
ところでSpringとEclipseを使った場合ってMVCはEclipse方式でEJB(セッション管理など)の部分をSpringでやるっていうイメージなのでしょうか?




292 名前:MARU-CHAN [05/02/15 08:14:04 ]
ごめんなさい、291はEclipseじゃなくてStrutsの間違い。

293 名前:MARU-CHAN [05/02/15 08:25:38 ]
291は間違いダラケでした・・・書き直すと

ところでSpringとStrutsを使った場合ってMVCはStruts方式でEJB(トランザクション管理など)の部分をSpringでやるっていうイメージなのでしょうか?

です。すんません。

294 名前:デフォルトの名無しさん mailto:sage [05/02/15 12:12:02 ]
>>293
MVCというのがどういうことか正確にわからんが、StrutsのActionとActionFormはそのまま使って、ActionServletをSpringに置き換えることになる。
HTMLフォーム→JavaオブジェクトまではStrutsに任せて、あとはSpringでって感じだな。

295 名前:デフォルトの名無しさん mailto:sage [05/02/28 10:26:54 ]
アマゾヌで Spring In Action 発注したが 3/11 配送予定。
予約じゃなかったから仕方ないところか。

>293
Struts はコントロールとビューだけに専念して
ロジックを POJO で記述して Spring に管理させる感じかと。
Spring 独自の MVC フレームワークもあるらしいけど
そっちってどんな感じなんですかね?
Struts の servlet API べったりな感じが
どーも Spring の POJO マンセー思想に合わない気がする。。

296 名前:デフォルトの名無しさん mailto:sage [05/03/06 14:23:38 ]
POJOなんて、スローガンに過ぎなかった、と。

297 名前:デフォルトの名無しさん mailto:sage [05/03/10 12:25:54 ]
Spring in Action がまだ届かない

298 名前:デフォルトの名無しさん mailto:sage [05/03/10 21:07:16 ]
SpringってWebじゃない普通のアプリケーションでも使えるの? 

299 名前:デフォルトの名無しさん mailto:sage [05/03/10 23:29:18 ]
使おうと思えばつかえるけど、そういうのにはPicoContainerのほうが向いていると思われ。
私はPicoContainerの、何にでも使えるところが気に入ってます。

300 名前:デフォルトの名無しさん [05/03/16 19:21:26 ]
Seaser>>>>>>>>>>>>>>>>>>>>>Spring

301 名前:デフォルトの名無しさん mailto:sage [05/03/17 10:43:16 ]
Seaserなんて存在しないから、ということがいいたいのか。



302 名前:デフォルトの名無しさん mailto:age [2005/04/08(金) 15:20:13 ]
6月にやるJavaWorldのイベントにロッド・ジョンソンが来るみたい。

www.javaworld.jp/jwday/session/index.html

生ロッド見に行こうかな。

303 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 00:26:06 ]
DIのよさが分からん。。。

インスタンスを設定ファイルで与えられるって事がそんなにいいの?
アンチDIというより「DIってすげんだぜー」って言えるように
実は洗脳して欲しかったりする。

DIが出てきてどんな所が楽チンになったのよ?

304 名前:デフォルトの名無しさん [2005/04/09(土) 01:12:55 ]
コンポーネント指向が強制される所?
インターフェイス経由で操作するのは、前から言われてることだし。

305 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 01:20:32 ]
>>303
EJBを使ってみれば、以下にSpringが楽で、「ああ俺だったらEJBのこのめんどくせえ
ところ、こうするのに!」というところを見事に解決していることがわかるよ。

306 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 01:28:17 ]
以下=如何

307 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 09:16:59 ]
303じゃないけど俺も同じような感じ。
EJBを使わない俺にはメリットのない話ですか?
クラスどうしの依存性が減り、シンプルになり、
ユニットテストがやりやすくなるという利点は分かるのですけど、
その代わりにXMLファイルがごちゃごちゃして手に負えなくなる。

勘違いしてる?



308 名前:303 mailto:sage [2005/04/09(土) 09:21:03 ]
>コンポーネント指向が強制される所? 
あるレベル以上のメンバーと組むことが出来る漏れとしては、
そんなもんイラネ?

>インターフェイス経由で操作するのは、前から言われてることだし。 
インターフェースは好きじゃないっス。デバッグやりにくいっス。
(あくまでDIのためにインターフェース作るのはね。プラグイン開発
とか機能要件として必要な場合はもちろん使う)

>EJBを使ってみれば、以下にSpringが楽で、「ああ俺だったらEJBのこのめんどくせえ 
>ところ、こうするのに!」というところを見事に解決していることがわかるよ。
漏れもEJBはめんどくさいって思ってる。なのでHibernateつかってる。
AOPでトランザクションはいい感じだけど、DIのよさはまだわからっス。


309 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 09:23:51 ]
>>307
ハゲドウ!!



310 名前:303 mailto:sage [2005/04/09(土) 09:25:00 ]
309は漏れです。。。

311 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 10:29:11 ]
>>308
インタフェース経由で作らないと、使い回しがしにくいだろ?
Spring以前の問題。
あるレベル以上のメンバーの中で、308のレベルだけ低いのか、
あるレベルというのが低いのか。



312 名前:303 mailto:sage [2005/04/09(土) 11:07:08 ]
うぬー。使い回ししやすい、しにくいはインターフェースに
かかわらずクラス設計しだいじゃないの?
上にも書いたけどインターフェース自体を否定してるわけじゃないよ。
インターフェースとImplクラスが1つずつしか作らない場合
は面倒だなーって思います。

313 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 13:39:51 ]
そうだな、インターフェースを使ったプログラミングをしようとすると、
ファクトリをつくらなくちゃいけなくなるだろ。だって、newでインスタンス
を作っちゃうと、newしている部分は具象クラスに依存してしまうから。

なんで、ファクトリ用クラスをつくって、ファクトリ経由でオブジェクト生成する。

とここまでは誰でも実装すると思うんだよ。
で、ここでファクトリを書く方法を考えてみようや。クラスごとにファクトリを
別に書くなんて馬鹿げてる。じゃあ、インスタンス生成メソッドの引数でクラス・オブジェクト
かクラス名を引数で取ることにしよう。

じゃあ生成メソッド内で、渡されたClassに対してgetInstanceすることにしようか?
これはできない。渡されるClassは、インターフェースだろうから。

じゃあif文で、渡されたClassなりClass名なりで分岐して、具体的な生成クラスを
特定しようか。これも馬鹿げてる。クラスを追加するたびにファクトリにif文を追加
して、コンパイルし直すのか? 分かりやすい記述法で外部ファイルに記述したい
ところだ。

そういや、具象クラスを生成するときのコンストラクタに引き渡す引数はどうしよう
か。ファクトリの生成メソッドにObject[]として引き渡してもらおうか? 生成後に
setXXXX()で全部セットしてもらおうか。どっちにしても、具象クラスのコンストラクタ
なりプロパティに依存してしまうよねえ。

さあ、どう実装しようか。外部ファイルで具象オブジェクトを特定して、具象オブジェクト
生成時に内部状態の初期設定も行うファクトリだ。

そんな話を説明しているのがロッド・ジョンソンの本「J2EEシステムデザイン」。いろんな
アイデアを具体例を使って披露していく。このアイデアを実装して公開したのが
Spring Frameworkだよ。

314 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 15:18:41 ]
>>308
> 漏れもEJBはめんどくさいって思ってる。なのでHibernateつかってる。
> AOPでトランザクションはいい感じだけど、DIのよさはまだわからっス。

EJBめんどくさい→Hibernateつかってる
となるということは、「EJB = EntityBeanのみ」ってことなのか?

DI Containerが作られた契機となった問題点って、Stateless Session Beanを
つかったビジネスロジック層の作り方があまりにもめんどくさい、ってところだっ
たと思うんで、ロジック層をDIパターン以外の方法で効率よく解決できるんなら、
「DIいらね」ってことに出来ると思うけど、Hibernateではそこは解決できんよね。

Hibernateで永続化層はクリアしたとして、ロジック層のオブジェクト生成は
どうするわけ? newしてるってこと? EJBは論外として。

315 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 16:24:18 ]
インターフェイスを使う利点が少ない状況ってのはやっぱりある罠。

上にも少し出てたけどプロジェクトメンバーの技量があまりに低い場合には
プログラム中で全てif文で分岐した方が効率がいい場合もあるかもしれない。
インターフェイスの使い方をよくわかってない人はまだ意外といる。(職場によるだろうけど)

「外部ファイルで具象ファイルを指定することにより具象ファイルを変更することが可能」というのも
それによる恩恵を受けられる環境と受けられない環境があるんじゃないだろうか。
自社システムやそれに近いぐらいに自分のところで管理しているシステムで
かつ頻繁な拡張や似たようなもの作る機会が多いなら強力だと思うけど
作って納品して終わりとか拡張がまるでなかったりしたら自分たちにとっての利点はあまりないかも。
>>311が理想だと思うけど状況次第では>>312の言うこともわかる。

俺はSpring好きだしどんどん使っていきたいと思ってるけど使ってもおいしくない状況ってのはやっぱりあるんジャマイカ。

ところでSpring in Action邦訳☆⌒ 凵\(\・∀・) まだぁ?

316 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 17:02:49 ]
そう、だから、インターフェースを使う必要がないならファクトリも必要ないんで、
DIパターンの利点がほぼなくなる。

あとは、コンテナが提供するAOP機能が使いたいかどうかだけだろう。

でもインターフェースを使ったことによる利点が出てくるのって、実は開発の
後の方(変更が入った時)なんで、最初のうちに「この開発ではインターフェース
使うほどじゃないだろ」とか判断してしまうと、後半で泣きを見ることもあるから、
先行投資としてインターフェース中心でいくんじゃないかね。

317 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 17:11:58 ]
インターフェイス主体でプログラム作るときの面倒さが減ることがDIのメリットなら、DI自体にはメリットはないみたいになるな。

318 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 17:45:35 ]
>>317
詳しく

319 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 18:03:51 ]
いや、DI「コンテナ」の、インターフェース生成時の実装隠蔽ファクトリとしての利点はなくな
るだろうけど、インスタンス生成時に依存性を注入して、すべてのプロパティが構成済みの
オブジェクトを作成するというDIパターン自体のメリットは残るだろう。

インターフェース主体でないからって、DIパターンなしだったら、

インスタンス生成→他の依存インスタンス生成(このインスタンスにも依存インスタンスがある)
→インスタンスのプロパティに依存インスタンスをセット

ってのを自前でやらないといけない。newして、関連オブジェクトをnewしまくって、関連
オブジェクトの全プロパティをセットして、で、最初にnewしたオブジェクトに関連オブジェクトを
セットしないといけない。

そんなめんどくさいこと、ファクトリでやってよ、と思わないか?

320 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 18:28:24 ]
ファクトリでやるのはめんどくさいから、それぞれのオブジェクトでやってよ、と思ってはだめですか?

321 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 19:33:43 ]
>>319
先日迷ったあげくSpring無しで書いたんだけどいちいちnewしてセットは確かに面倒だった。
これを面倒だと思うのはある程度Springに慣れてるからだと思うけど
それ以上に苦痛だったのは後で変更が発生したときの修正が面倒そうだと思いながら書いてたからだな。

でも>>319の一番のメリットは
具象クラスが変わることで具象クラスが必要とするオブジェクトが変わってもファクトリを修正せずに対応できること
(つまりは具象クラスの差し替えのしやすさ)
じゃないのかな。
それも具象クラス差し替え時に生きてくるメリットな気がする。

俺はSpringやDIコンテナ、もちろんインターフェース多用するのも否定するつもりはないんだけど
仕事場の環境次第ではSpringわからない人もまだ多いし
>>318の言うような先行投資の効果が目に見えて出ない時も多々ある。
それを考えると設定ファイル書いたり周知したりで面倒さが前面に出てくる人がいるのもわかるな、と。
後々俺が作った物を他の人が管理することになった時にその人はSpringを知っていてくれるだろうか、
俺がこれまでにしたつもりの先行投資は最終的にプラスになるのだろうか、
とちょっと悩んで書いたのが>>315なんだ。
チラシの裏って書いた方が良かったかもな。すまん(´・ω・`)



322 名前:303 mailto:sage [2005/04/09(土) 20:29:45 ]
>>314
>ロジック層のオブジェクト生成はどうするわけ? newしてるってこと?
うん、newしてる。

>>315
そうだね、頻繁な拡張とかはないです。

>>316
>でもインターフェースを使ったことによる利点が出てくるのって、実は開発の 
>後の方(変更が入った時)
うーん、開発後方でImplクラスを丸ごと挿げ替えるほどの変更は
ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?

あー、>>319 見て分かった。ビジネスロジック層の作り方がそもそも違うんだ。
漏れは、依存オブジェクトをプロパティ経由でセットしないデツ。なので、
ビジネスロジック層のオブジェクトの殆どが状態を持たないです。
ただね、このOOPらしくない所が良いのか悪いのかは漏れも迷ってる。


323 名前:デフォルトの名無しさん [2005/04/09(土) 21:16:39 ]
OOに反するコード=劣悪なコード

324 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 21:37:54 ]
ステキなOOの概念がこの2年で大きく変わっている現実

325 名前:デフォルトの名無しさん mailto:sage [2005/04/09(土) 22:15:37 ]
> うーん、開発後方でImplクラスを丸ごと挿げ替えるほどの変更は
>ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?
ただのロジック変更ならソースの修正で済むけど、対象によってロジック分岐とかだと
if instanceof else if〜 で分岐するのは全くエレガントじゃないから
Strategyパターンにしたほうが後々いいでしょ、って事だな。
拡張性とか関係ない部分ならいいかもしんないけど。

326 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 00:22:16 ]
うーん、最近の流れは勉強になるなぁ。
いつまでも独学は不安なので、自分の独学部分が正しいか
検証することも踏まえて、なんか本を買おうと思うのですが、
・これは読め
・これは糞だから読んじゃだめ
などありましたら、ご紹介いただけますか?

327 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 00:27:43 ]
>>322
>ないなー。Implクラスの実装を修正するだけじゃすまないって事デツか?
機能追加の場合には新しい機能向けのクラス作って
条件によってどちらを使うか切り替えればわかりやすいと思う。
また、別のユーザー向けに似たようなシステム作る時には
クラスごと差し替えることができればとても楽。

>漏れは、依存オブジェクトをプロパティ経由でセットしないデツ
引数で渡してるの?
インターフェース使わないならそれでも困らないと思うけど
インターフェースで実装の切り替えをするような場合には引
数がビジネスロジッククラスの実装に依存すると困るのよ。
ある実装ではこのオブジェクト使うけどこの実装では使わないとなると引数が統一できないから。
その点>>319のように依存オブジェクトを初期化時に設定ファイルで指定して
プロパティやコンストラクタでセットするようにすれば
呼び出し側からは実装の違いを全く意識する必要がないことになる。

328 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 01:11:57 ]
Springを使って3ヶ月程度のプロジェクトをやってみた。
俺はPMの立場で実装はやらないが、コードレビューする程度。

結論は、SpringにするかはともかくIoCコンテナなしの開発は、もう考えられない。
最初にかならず行っていた低レイヤー部分のフレームワーク作りをしなくて済むのだから。
いつもなら、実装がぶれるのが嫌で、最初のうちに低レイヤーのフレームワークを作ってから
プログラマに渡していた。

最初にこう書くべきだというサンプルを見せてやれば、
newbieでもそこそこのものを書き上げてくれる。

Springのソースを読んでて、interfaceは多重継承できることを初めて知った。
Javaには自信を持ってたのに、自分に少しがっかりした。

329 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 02:32:31 ]
>>326
>>313にも出てるけど、ロッド・ジョンソンの「J2EEシステムデザイン」はお勧めできる。
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797322888/250-2144330-3153039

DI(あるいはIoC)コンテナ登場前夜に、EJBの問題点を詳細に書き表して、なおかつ
解決するための方法論を具体的なコードを交えて説明した名作だ。この本で紹介された
アイデアがそのまんまSpring Frameworkの基礎になってる事は有名。AOPの実現方法ま
でおんなじだし、Springの解説書か?と思えるほど。

まあロッド・ジョンソンがSpringの開発者なわけであたりまえなんだろうけど。

一方読む必要がないのは、「Java ブループリント」だな。人生を無駄遣いする事になる。

330 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 02:53:18 ]
>>328
そう、それだ。
エンタープライズ向け開発だと、いろんな技術レベルの人間があつまるから、かならず
基礎アーキテクチャを技術レベルが高い人間で実装するよな。

つまり技術レベルの低い人でも、決められた実装方法に従って普通のJavaプログラムと
して作れば、あとは基礎アーキテクチャが何とかするよ、という状態を作るわけだ。

そういうものの大部分って、ロジック層のシングルトン・オブジェクトをどうやって生成するか
とか、初期化を間違わないにはどうしたらいいかとか、EJBを取得するのにJNDI参照したり
RemoteExceptionを処理し忘れたりしないようにするにはどうしたらいいか、とか、
めんどくさいことばっかりなんだよな。

Springはそういうものの大部分を吸収してくれるし、EJBの利点の一つ、宣言的トランザクション
もサポートしてる。

正直、リモート呼び出しの必要性が無ければEJBを使う意味を見いだせない。

331 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 03:25:34 ]
思うに、Spring自体が、EJBのめんどくさいところを解消する過程で産みだされたところを
ふまえとかないと、なんで「Spring楽だー」という輩がいるのか理解できなくて、>>307のような
感想になっても仕方がないと思う。

>>307
>その代わりにXMLファイルがごちゃごちゃして手に負えなくなる。

EJBのディプロイメント・ディスクリプタというXMLファイルは、SpringのXML定義の10倍は
ごちゃごちゃしてて手に負えないんですよ。Springの構成ファイルは分かりやすいよ。
しかも構成ファイル一つでリモート呼び出しを除くEJBの機能を実現できるんだったら、
EJBに苦しめられた輩が採用しない理由はないよ。



332 名前:デフォルトの名無しさん [2005/04/10(日) 03:39:21 ]
ふむ、ageとこう。

333 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 03:46:18 ]
            _
        r-、' ´   `ヽr-、
       ィ7 /l: ハヽハ トヾ    駄スレを保守することは、この俺が許さん!
        '|l |'´_` ´_ `| ||    信念に基づいて行動する。
        | |´ヒ}   ヒ}`! l|    それを人は正義と言う。
   __ノ゙). 从 l,  _'_.  |从    今俺が行ってることは、荒らしではない。
 ,_'(_ ノ_ヽ ヾl.> - ,イ;リ     正義という名の粛清だぁ!
 { f:テ} {'f:テ}',/\ヽ--//ヽ    
 ヽ,r─‐ 、ィ .、、 i l>Y<! i '、    バーニング!
 / iゝ_ノ iヽ /l   |l  l   ',
 lンヽ/ムノじ



334 名前:デフォルトの名無しさん mailto:sage [2005/04/10(日) 08:58:20 ]
>>328
Webじゃない普通のアプリについてはどう思ってるか教えて欲しい


335 名前:328 mailto:sage [2005/04/10(日) 10:12:52 ]
>>334
今回は、通常のアプリとWebアプリとどちらでもSpringを使った。
Webアプリのほうが制約があり、通常のアプリのほうがより自由というのが回答。

Springの構成は、まず通常のJavaアプリで使えるコアがある。
optionalな形でSpring WebなどのWebアプリ用サポートがある。

Springは、BeanFactoryという汎用のファクトリに識別子を渡して生成してもらうのだが、
このファクトリのインスタンスをどこかに保存しておく必要がある。
保存しない場合は、ファクトリのインスタンスを毎回newする必要が出てくる。
これは毎回設定を解釈するというコストをかけることとイコールだ。

で、通常のアプリならメインクラスのメンバにでも入れておけばよい。
これがWebアプリだと、applicationスコープのアトリビュートに放り込むことになる。

BeanFactoryのアトリビュートへの設定と取り出しを管理するクラス自体は、Spring組み込みで提供されてる。
しかしServletContextを使える場所でしかBeanFactoryを取得できないという制約が生まれる。

ちゃんとクラス設計していれば問題は生じないけど、
ちょっと工夫してあげなきゃならない場面もでてくる。

まああれだ。たぶん大丈夫だよ。
心配なら一度ファクトリ部分のソースを追って、中身を確認したらどうだろう。
変な制約はないし、シンプルで、不安は生まれないと思う。

336 名前:334 mailto:sage [2005/04/10(日) 13:11:02 ]
>>335
さんきゅ

337 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 02:58:25 ]
Spring In Actionよりも、ロッド・ジョンソンの「Expert One-on-One J2EE Development without EJB」
を邦訳してほしいな。「J2EEシステムデザイン」の続編みたいな本だ。

338 名前:デフォルトの名無しさん mailto:sage [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.");

339 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 15:24:27 ]
ああ、途中で送信してもうた。

>>335
> BeanFactoryのアトリビュートへの設定と取り出しを管理するクラス自体は、Spring組み込みで提供されてる。
> しかしServletContextを使える場所でしかBeanFactoryを取得できないという制約が生まれる。

は、ApplicationContextを指していると思うんですけど、ApplicationContextの取り出しは、
>>338に書いたように、ServletContextから、↓の名前のクラスで埋められている、オブジェクトを取り出すんでOK?
「org.springframework.web.struts.ContextLoaderPlugIn.CONTEXT.」

それとも、ApplicationContextを取り出すには、こうする見たいなのってあるの?

340 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 16:10:43 ]
>>339
俺はこうしてるよ。
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);


341 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 16:33:05 ]
>>340
素早い回答サンクス!!!
やっぱり、ユーティリティはあったのね。



342 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 22:03:14 ]
アプリケーションを起動したまま、コンポーネントを入れ替える方法ってありますか?

343 名前:デフォルトの名無しさん mailto:sage [2005/04/11(月) 22:42:10 ]
こういうやり方で取り出すのはOKなのかな?
これなら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"/>


344 名前:デフォルトの名無しさん mailto:sage [2005/04/12(火) 01:37:15 ]
1個のVMに1個のWebアプリケーションのみ配備する、という限定ならいいだろうね。
裏を返せば不適当ということ。

util.BeanFactoryHolderクラスは、
Servletコンテナに100個のWebアプリがディプロイされていても、
そのうちの1個でしか使えない。
もしくは、100個のWebアプリ間で1個のBeanFactoryを共有する。

345 名前:303 mailto:sage [2005/04/13(水) 01:02:58 ]
ご意見色々ありがとー。勉強になりました。
上に出てきた本も読んでみます。

現状の漏れの考えは、
1.ビジネスロジックに再利用性は殆ど感じない(あるとしたら
ライブラリとかユーティリティ系)。
2.業務要件として拡張性が求められている箇所は、自分で
ファクトリを作らないでDIコンテナを利用するのは良いかも。
3.本読んだらかわるかも。

おまけ
EJBで作られたビジネスロジックのコンポーネントは殆ど見たことない
んだけど、それってEJBがめんどいからでは無くってやっぱり
ビジネスロジックに再利用性が無いからじゃないかなって、
思いまふ(UI系は除いて)。
beaが頑張ってる気もするけど、beaでこの程度かと。。。



346 名前:デフォルトの名無しさん mailto:sage [2005/04/13(水) 01:46:12 ]
ビジネスロジックをインターフェース経由で使うのは再利用のためじゃなくて、
業務上の変更に耐えられるようにするためだよ。

EJBはほっといてもインターフェース中心になるんだけど、一つのオブジェクトに
対して4つのインターフェースが必要だったりして馬鹿くさいので誰もやらんのだ
と思うけど。

おれもトランザクション・スクリプトというか、関数プログラミング的に作っても
追いつくときは、極端にstaticメソッドだけでビジネスロジックを組んだこともある。

でもドメインモデルみたいに、各ビジネスロジック・オブジェクトが他のオブジェクト
と結びつき合ってる場合だと、業務の変更に対応する場合に、クラス構成を変えた
ほうが早いという場合もあるよ。
「請求書サービス」を「請求書サービス」と「売掛統計サービス」と「台帳サービス」
の三つに分解して、請求サービスのデータ登録メソッドを呼び出したら統計と
台帳も更新するように変えたって、請求書サービスのインターフェースがかわら
なければコントローラに影響を与えない。

逆に、オブジェクトが互いに依存し合ったドメインモデルのようなものを作らない
なら、別段困らないようにも思う。

347 名前:デフォルトの名無しさん mailto:sage [2005/04/18(月) 21:27:23 ]
Spring入門が発売されましたなぁ

348 名前:デフォルトの名無しさん [2005/04/18(月) 23:07:17 ]
今読んでます

349 名前:デフォルトの名無しさん [2005/04/18(月) 23:27:43 ]
どんな感じ?

350 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 09:09:14 ]
俺は確保はしたがまだきちんと読んでない。
iBATIS との連携について書いてあったのがわりと新鮮だった感じ。
(もちろん Hibernate との連携も抑えてあった。)

Spring in Action の方が読み応えありそうなので
そっちを最初に片付けようと思ってる。

351 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 22:02:23 ]
>>349
入門書という位置づけのようだが、定義ファイルに関する説明が
一覧表ですまされていたりするので、本当に初めての人がこの本で
Springを使えるようになるのかはちょっと疑問。
ApplicationContextのメッセージソースやイベントの説明はあるのに
FactoryBeanの説明がないっていうのは妥当な判断だろうか?
AOPも定義ファイルに書く使い方の前にProxyFactoryを直接使った例で
説明する意味はあるのだろうか?
DIとAOPという一番ベーシックな部分の説明が弱いのが入門書としては
難点だと思う。といって応用的な話があるわけでもなく…



352 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 22:48:59 ]
>>350-351
サンキュ
Seasar2をちょっと触ってみたぐらいの俺だけど、Spring in Actionを買ってみます

353 名前:デフォルトの名無しさん mailto:sage [2005/04/19(火) 22:54:31 ]
Spring入門、俺も読み始めました。
内容はおいといて、文章は少しウザイ。

354 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 17:55:55 ]
JDBCコネクションをプーリングしたいんですが、どんな方法があるのでしょうか?

355 名前:デフォルトの名無しさん mailto:sage [2005/04/20(水) 20:01:54 ]
Webならサーブレットコンテナまかせ。

356 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 00:52:01 ]
>>354
Springで使うのなら、Apache Commons DBCPが一番お手軽かな
ttp://jakarta.apache.org/commons/dbcp/

357 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 00:55:53 ]
「Spring入門」の2章でSpringをEclipseで使えるようにする説明があるんだけど、
「まずはSpringを以下のサイトからダウンロードし、適当なディレクトリに
解凍してほしい。
(URLとファイル名)
図2.19はダウンロードしたSpringをインポートしたJavaプロジェクト(以降は
Springプロジェクト)である。」
ってだけなんだよね。普通はこの説明で十分なのかな?
この後インポートした中にあるJARを別プロジェクトのlibにコピーしたりして
インポートする意味なしじゃね? って感じなんだよね。ソースパスの話ないし。
手間かけずにクラスパス通してSpringのソース見れるようにしたいんだけど
どうするのがいいのかな?
CVSから.projectと.classpath取ってくる? maven eclipseしてからインポート?
みんなどうしてる?


358 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 10:06:14 ]
>>355,356
まずはDBCPから始めてみます。


359 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 11:51:42 ]
>>357
本屋に逝って JavaPress Vol.41 を嫁

360 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 12:27:25 ]
>>359
持ってるけど大したこと書いてない
spring.jar他をクラスパスに通せと必要に応じてsrcやdoc以下を参照しろってだけ
spring.jarくらいならともかく,その他のlibにあるJARを手間かけずにまとめて
クラスパスに設定したいなんて誰も考えないってこと?

361 名前:デフォルトの名無しさん [2005/04/21(木) 20:41:26 ]
JSFやSeasarの陰に隠れてもはや風前の灯火…。



362 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 22:00:16 ]
>360
spring 使うことで増える lib は
spring.jar と aopalliance.jar
(AOP する人は cglib もか)程度なんで、
別に特別たくさん増やすとかいうわけでもないので
そんなに問題になると思わないんですが。

Spring のソース見る分にはlib/以下のjar
にclasspath通しまくる必要なんてないし。


363 名前:デフォルトの名無しさん mailto:sage [2005/04/21(木) 22:09:55 ]
>>361
JSFの影にかくれるとか言ってる時点で、Springがなんなのかわかってないだけということをさらしてるわけですね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<243KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef