【Java】 Java Web Ap ..
[2ch|▼Menu]
254:デフォルトの名無しさん
13/03/07 16:24:17.70
JavaとWAF使うってことは型にはめやすい、型にはめるメリットがある(似た画面多い、人が多い)案件って事
そうじゃないこともあるが、それをここで話す意味がわからない

255:デフォルトの名無しさん
13/03/07 16:36:01.22
>>254の「そうじゃないこと」は「そうじゃない案件」です

256:デフォルトの名無しさん
13/03/07 16:43:44.27
>>237
Grailsは実質Spring MVCで、その上に動的言語と名前ベースのCoCの薄皮をかぶせた物だから。
なのでドメインクラスとかサービス層など内側の大事なところはJavaでカッチリ型安全に書いて
おいて、それをGrailsアプリの上にデプロイするのは案外自然に出来る。
そうしておけば重さが気になるのはVCのウェブ層だけの部分になるけれども、ここは開発も実行
も重いよw GroovyもJSPのGroovy版であるGSPも事前コンパイルされるけれども、Groovy
自体が遅い。ただ生産性は高いと思う。GroovyやRubyの経験があればVCは本当に書きやすい。

意外にはまったのが依存性の解決かな。Mavenでなくてivyベースで、Mavenリポジトリから
依存性を引っぱってくることも出来るのだけれども、Mavenとは微妙に振る舞いが違うことも
あってMavenベースのプロジェクトと連携するさいに妙にはまったことがある。
Maven統合プラグインもあるのだけれども評価時にはイマイチで以後使っていない。

257:デフォルトの名無しさん
13/03/07 18:23:53.38
>>256
Grailsって、ORMはHibernateを同梱しているんだよね?
Hibernateあまり使いたくないんだよなぁ。
MyBatisなどに差し替えられないの?

258:デフォルトの名無しさん
13/03/07 18:36:40.23
>>257
Mを構成するGORMというORマッパーはJPAどころかがっつりHibernateに依存しているので
無理っぽい。WAR等からHibernateだけ切り離すのも無理じゃないのかな。
ただ別のORMで書かれたMをVCから叩くのは普通に出来ると思う。たぶん。

259:デフォルトの名無しさん
13/03/07 18:39:36.67
>>256
ありがとう。
CoCが魅力的だったけど、速度も重視したいからSpring MVCも見てみる。
GrailsはJavaでも書けるようになってほしいな

260:デフォルトの名無しさん
13/03/07 18:46:34.27
やっぱり不自由が発生してるじゃん
Aだけを使いたいのに使いたくないBまで使わなきゃいけないとかw
技術力が普通にあるのなら使う必要ないんだよ

261:デフォルトの名無しさん
13/03/07 18:57:29.88
>>260
ORMは好きなの使えるっていうフレームワークもある。

JPA使えるやつなら大半の人は文句ないんじゃないの
JPAデファクトスタンダードだろうし

262:デフォルトの名無しさん
13/03/07 19:04:53.41
JPAw

263:デフォルトの名無しさん
13/03/07 19:05:31.48
デファクトww

264:デフォルトの名無しさん
13/03/07 19:16:01.10
なに草はやしてるんだ?
JPAはJavaでは一番メジャーなORMだろう

265:デフォルトの名無しさん
13/03/07 22:06:26.45
>>260
フレームワークの実装が特定のライブラリにがっつり依存しているか交換可能なように
設計されているかの違いだろうなぁ。
そしてそれはフレームワークの開発の速さや使い勝手とのトレードオフでもある。

GrailsはHibernate似のcriteriaも提供していたりとHibernate以外に交換するのは
しんどそう。

266:デフォルトの名無しさん
13/03/08 02:05:35.35
>>260
「やっぱり」って、不自由が発生するのを否定してるやついたか?
制約する・型にはめることによるメリットが不自由というデメリットより大きいってだけだろ

267:デフォルトの名無しさん
13/03/08 02:16:55.15
「特殊なこと」ってのが曖昧だから話にならんのだよな
ビューに関してはJSP使ってるフレームワークだったら不自由もないだろ
コントローラにしたって所詮HTTPの範疇じゃたいして特殊なことなんかできんだろ?

268:デフォルトの名無しさん
13/03/08 07:21:32.53
listの中にlistが入ってて、さらにlistが入ってるような
データが受け渡しできないから糞
そんなフレームワークばっかり。フレームワーク作ってる奴は
単純なサンプル画面しか作ったことないやつばっかり。

269:デフォルトの名無しさん
13/03/08 07:45:04.59
>>268
どのフレームワークのことを言っているのか皆目不明なのでざっくりMVCを使って尋ねるけど、
「受け渡しが出来ない」ってM・V・Cのどれからどれの間で受け渡しが出来なかったのさ。

フレームワークが使えない理由としてなにか高尚なものが来るかと思いきや、いきなり脱力な
例が飛び出してぐんにゃりですよ。

270:デフォルトの名無しさん
13/03/08 08:05:17.79
どこで受け渡しできないかも知らない程度の知識なんだとわかった

271: 忍法帖【Lv=40,xxxPT】(2+0:5)
13/03/08 08:14:16.37
>>268
批判するならどのフレームワークを使ったかくらい書くべきだね
すべてのフレームワークが同じわけではない

272:デフォルトの名無しさん
13/03/08 09:52:29.11
仕事以外の時間もプログラム板に来るような勤勉でスキルも高いであろうおまえらは
不便なフレームワークでハマる必要ないんだよ
流行りに流されてるのに気づいたほうがいい
チームに新人やスキルが低い人間がたくさんいてそいつらに大部分を任せないといけないから
スパゲッティを避けるため仕方なく使ってるという話ならわかるけど

273:デフォルトの名無しさん
13/03/08 11:04:32.79
そこでPlay! Frameworkですよ
Play! は Scala が話題になっているが、Javaでもかける。

274:デフォルトの名無しさん
13/03/08 11:58:37.45
wicketってのがXML書かなくていいらしいんだけど、うらやましい。

275:デフォルトの名無しさん
13/03/08 15:19:03.90
Playは独自感が半端なく強かったり、1.0=>2.0を見る限り不安定感が否めない。
wicketは素直な設計だし、1.5=>1.6を見る限り安定していて実用的な時期に思える。

用途に合わせて様々なフレームワークを使うぐらいなら、
wicketみたいな大規模向けフレームワークをベースに、
小規模システム向けのスケルトンソース・ジェネレータでも作ったほうが良いんじゃね?

276:デフォルトの名無しさん
13/03/08 15:57:00.15
フレームワークいらんという人はORMやDIは使うのかな。
今時手組のSQLに生のJDBCとか勘弁。

277:デフォルトの名無しさん
13/03/08 16:06:37.78
ORMなんか使わないよ。パフォーマンス悪いし。

278:デフォルトの名無しさん
13/03/08 16:12:45.10
>>276
ibatisはたまに使う。
一番いらないと思うのはDIかな。
newぐらい自分でしたい。

279:デフォルトの名無しさん
13/03/08 16:24:05.63
とはいえweb.xmlにサーブレット登録した時点でサーブレットクラスのnewに関しては既に
サーブレットコンテナに委譲しているわけだからなぁ。
その先、各サーブレットクラスが必要とする依存性を自前でnewするかこれも委譲するかで
自前ファクトリをゴリゴリ書くかapplicationContext.xmlを書くかの違いが出てくる。
インスタンス生成の委譲の程度問題だと思うんだよね。個人的にはサーブレット使うことと
DIを使うことの間にはあまり断絶はない。

280:デフォルトの名無しさん
13/03/08 16:33:16.09
とくにWebアプリでORMとかアホかと思う。
Webアプリなんてサーバー集中型なのになるべく負荷を減らさないでどうする。
ORMはクラサバアプリ向けだろ。少しは考えて欲しい。

281:デフォルトの名無しさん
13/03/08 16:55:04.22
DB知らない素人が手組みしたDBスキーマとクエリ。
DB知らない素人が定義したORマッピングとそれから自動生成されたDBスキーマ。
どちらを使えと問われれば自分は絶対に後者を使う。前者は墓穴の宝庫だが後者は
一応それなりに定石を外さないスキーマやクエリを吐く。

DBの素養のある人が手組みしたDBスキーマとクエリ。
DBの素養ある人が定義したORマッピングとDBスキーマ。
どちらを使えと問われれば、まあ使い勝手次第であって基本的にはどちらでも良い。
結局スキーマもマッパーが吐くクエリも手組と大差無いものに大抵は落ち着くから。
ただし成果物のAPIレベルでの使い勝手は当然ORMを使った方が初めから機能豊富。

結局DB理解している人間が担当しているか否かが重要なのであって、その上の上物
はプロジェクト毎に好きに決めれば良い。ただし手組みさせるとそのDB理解している
人間の手作業がバカにならん。許させる範囲でORMで楽させてあげても。

282:デフォルトの名無しさん
13/03/08 16:58:19.38
そうやって、もっさりアプリ量産してくれ。
俺の超サクサクアプリが高評価なのはおまいらのおかげだ。

283:デフォルトの名無しさん
13/03/08 17:56:34.47
どうやらただの釣りだったようだな

284:デフォルトの名無しさん
13/03/08 19:25:26.20
ORMの必要性はわかるけど後でJDBCに差し替えにくい
Hibernateとかはバッドノウハウだなと思ったり。

285:デフォルトの名無しさん
13/03/08 19:39:04.75
最近のHibernateはJPA準拠してるんでしょ
JPAならそのままSQLも扱えるとおもうけど

286:デフォルトの名無しさん
13/03/08 20:00:01.24
ORMから外れたことをするにしても外れ具合の程度によってJPQLから生SQLまで
それなりに逃げ口は用意されているよね。
普通にORMを使って、困ったときにピンポイントでそういう逃げを利用するだけでも
大概のシナリオはカバーできると思う。

287:デフォルトの名無しさん
13/03/08 21:11:52.51
ORMを使うなら範囲検索にJPQL使うのは避けられないだろ。
プロトタイプだとしても主キーと全検索だけで作るわけにはいくまい。

288:デフォルトの名無しさん
13/03/08 21:29:37.43
その辺りはクライテリアとかフレームワークごとのDSLとか。
でもJPQLは良いものだ。サクッと使うのにちょうど良い。

289:デフォルトの名無しさん
13/03/09 01:00:06.57
>>281
DB知らない素人の件は俺なら前者かな。
ORMを理解してないやつが定義したものに
ORM適用するとか足かせにしかならん。
もちろんベストはそれなりにわかってるやつにDB定義をさせることだが
知らないやつが定義した場合は昔ながらのSQLで対応する他ないと思う。

290:デフォルトの名無しさん
13/03/09 01:03:09.87
>>282
俺もフレームワークとかDIとかORMとか否定派なので主張には賛成なのだけど
スマホアプリでもないただのWebアプリで
評価が高いとか低いとかどうやってわかるの?

291:デフォルトの名無しさん
13/03/09 01:29:45.60
DIを使うのって、短期的に楽をしたりするためより、変更に耐えやすいように作るためだと思うけど・・・・
(これも、スパゲッティなコードをメンテするより、長期的に楽になる)

Springスレだったかにも書いたけど、最初は Dao の実装を1つしか作らなかったけど
(Implが1つしかないのに、わざわざインターフェースを作っていた)、
途中で、一部のテーブルだけKVSに移行したので、MyBatisImplから別のDaoImplを作って移行した。
このとき、Daoのメソッドのインターフェースを変えないようにできたので、
修正はapplicationContext.xml だけ。コントローラやサービスクラスは変更無しで済んだ。

あとUT時は、サービスクラスにDaoをDIするときにモックにするとか。

こういうことを経験すると、よほど小さかったり使い捨て以外では、DIを使った方がいいと思っている。
DIをつかうための面倒なコストは、2回ぐらい変更があったら、回収できていると思う。

292:デフォルトの名無しさん
13/03/09 01:49:16.30
JavaEEが複雑すぎたために、DIが生まれたという解説をある本で読んだ。

293:デフォルトの名無しさん
13/03/09 03:27:23.17
>>291
レイヤごとにインターフェイス統一するのは
それなりのエンジニアなら誰でもやるし
そのケースでDIコンテナを使う必然性は感じられないが…

294:デフォルトの名無しさん
13/03/09 06:22:09.43
こまめにインターフェイスを定義することとDIコンテナを使うことは別に考えるべきだと思う。

インターフェイスを定義して抽象度を上げると実装の差し替えなど融通が効くのは別にDIを
使わずとも得られる恩恵だし、DIコンテナを使うにしても別にインターフェイスの定義は
必須ではない。注入される口の型が実クラス名で決め打ちでもDIコンテナは使える。

それならDIコンテナの利点は一体なにかというと、う〜ん、DIコンテナを使っているフレーム
ワークを使うときは自分もDIコンテナを使った方が楽という点が正直一番でかいかなw

例えばSpringを使ったフレームワークを使うときは基本的にコンポーネントもDI前提で開発
するのが殆ど作法になっている。コンポーネントはDIコンテナのコンテキストに登録すること
でアプリ上にデプロイするという手順が大抵のフレームワークでほぼ共通なので、DI使えば
どのフレームワークでも簡単に似た手順でデプロイ出来るのに対して他の方法だと途端に
苦労することになる。

295:デフォルトの名無しさん
13/03/09 06:38:14.57
DIコンテナの作者が後年DIコンテナはいらないと言ってた件

296:デフォルトの名無しさん
13/03/09 10:57:51.80
当人がいらんと思ってても他の人が必要なら別にいいんじゃないの

297:デフォルトの名無しさん
13/03/09 11:04:21.79
>>296
いらないと思ってるやつが
いると思ってるリーダーの下についたときは悲惨だぞ←俺の今の状況
だからもっといらない流れができてほしいわ

298:デフォルトの名無しさん
13/03/09 11:13:19.54
>>295
ひがやすお?

299:デフォルトの名無しさん
13/03/09 12:11:10.88
>>298
YES
テストがしやすければDIコンテナは必要ないってSlim3の時に

300:デフォルトの名無しさん
13/03/09 15:35:31.76
DIの目的はテストじゃないと思うけどな。

301:デフォルトの名無しさん
13/03/09 15:50:02.45
ソースコード資産を別のフレームワークにそのまま移行する例って実は少ないだろ

302:デフォルトの名無しさん
13/03/09 16:34:51.64
wicket は Play! と同じくらい独自色がある気がする。 Play! で Java の時は、 DB のテーブル定義は ebean で、sql は 生 sql がいい気がする。

303:デフォルトの名無しさん
13/03/09 16:39:17.86
iBATISがやはり最強だな。
今まで使わないで来て今じゃMyBatisになってるようだがやはり最強。

304:デフォルトの名無しさん
13/03/09 16:42:53.41
HibernateやJPA実装の類がダメな理由はなんだろう?

305:デフォルトの名無しさん
13/03/09 16:54:23.60
RDBMSとの対応を把握する必要があるなら
最初からSQLに書けばいいじゃない。

306:デフォルトの名無しさん
13/03/09 17:07:23.68
Entityオブジェクトのクラスが決まっているのならそちらに必要最小限の
マッピング情報を書き足せば良いじゃない。

変なスキーマ相手だと苦労するけどJPA。

307:デフォルトの名無しさん
13/03/09 18:17:55.52
>>301
少ないっていうかほとんどない
著作権が客に移るからそのまま再利用できないし

308:デフォルトの名無しさん
13/03/09 18:45:15.19
>>300
DIの目的はオブジェクト(コンポーネント)を疎結合にすること、
DIコンテナによってそれが交換しやすくなる、
それが最大のメリットになるのが単体テスト。
だが単体テスト以外じゃ交換性は実は必要ない、
だったらテストがしやすけりゃDIコンテナはいらん、と読んだ。

309:デフォルトの名無しさん
13/03/09 18:52:55.16
「DBスキーマが何も無い状態から」素直なスキーマを使う小規模Webアプリをサクッと開発する
のであればMyBatisでも生JDBCでもなくJPA系が一番楽だと思う。要するにアノテーションからの
スキーマの自動生成で事足りる範囲であればこれが一番コード量が少ない。

開発序盤はデフォルトのマッピングでORMにどんどん生成させて、ある程度エンティティクラスが
出そろったり怪しげなスキーマ吐くようになった時点で一旦止めてマッピングに手を入れる。
そっから先の苦労は、結局扱うドメインモデルの複雑さそのものなのでどのフレームワーク使っても
あまり大差はないようにも思う。

310:デフォルトの名無しさん
13/03/09 19:08:28.23
>>304
JPA1.0の頃だが、一覧とかエンティティ以外の形で取るのが絶望的にダメだったところ
今はどうよ?

311:デフォルトの名無しさん
13/03/09 20:42:00.68
>>310
1.0にも、それ以前のHibernateにも、一覧結果をEntity以外の形(普通のBeanやMap)で取得する方法はあったぞ
JPQL使う必要があったけど
どうしてもSQLで書かなければいけない場合でも、HibernateネイティヴのAPI使えば普通にEntity以外の形で取れていたし
その手法を実際に適用して開発したこともある

312:デフォルトの名無しさん
13/03/09 20:56:08.16
>>311
HibernateにResultTransformerがあるのは知ってるが、それは標準じゃない
JPA標準でできるのは、

・JPQLでnew Xxx(a, b, c, ...)
・SQLで@SqlResultSetMapping(columns={@ColumnResult(name="a")}, ...})

しか知らん
前者はJPQLってところが×。関連のマッピングがないと結合もできない。Mapが使えないのも×
後者は面倒なので×。結果がObject[]なのも×
間違ってたりJPA2.0で改善されてるところがあれば教えて欲しい

313:デフォルトの名無しさん
13/03/10 21:32:05.66
ほんのちょっと前にJPA推しレスしてるやつ数人いるのに、
具体的な話になったらレス付かないとかwww

314:デフォルトの名無しさん
13/03/11 21:11:59.19
軽く調べた

・JPA2.0のJPQLではFUNC("関数名",...)でネイティブSQLの関数が使えるようになった

JPQLに無い関数も使えるのでカバーできる範囲が広がるが、
RDBに依存するならわざわざJPQL使わねーだろw

・HibernateのJPQLで複数引数のnew Xxx(a, b, c,...)は去年の夏(4.1.5)まで使えなかったw

これ誰も使ってねーだろw

・EclipseLinkは@QueryHint(name=QueryHints.RESULT_TYPE, value=ResultType.Map)でObject[]の代わりにMapになる

結局非標準w

集計的な一覧が多い日本の業務系では使い物にならんぞJPA

315:デフォルトの名無しさん
13/03/11 21:24:30.49
>>311 >>314
「一覧」という言葉を多用してるけど何のこと?
多数のテーブルをJOINするようなクエリを意味してる?
一覧とは何を指しているのかわからなかったからレスのつけようがなかった。

業務系では使えないという主張もよくわからない
JPAに限らず、ORMはマッピングさえ終えてしまえば使えるでしょう

316:デフォルトの名無しさん
13/03/11 21:52:26.07
JPAが良いって言っている人達は、どんな用途にでもJPA最高って主張しているのか?
JPAで簡単に出来る範囲のことをやる分には、JPA最高っていう主張なのかと思っていたけど。

317:デフォルトの名無しさん
13/03/11 21:56:14.85
>>315
>>310に書いただろ、「エンティティ以外の形で取る」って
>>311には伝わってたぞ
例えばMAXとかAVGとか集計関数使って部署別、期間別などの一覧を出すケース
当然、SELECT句の並びは元になったテーブル(エンティティ)とはまるで異なる
単純だがSELECT COUNT(*), AVG(a), MAX(a), MIN(a), AVG(b), MAX(b), MIN(b), ...
が必要な時、JPAではどうする?(その答えが>>312>>314だ)

>>316
じゃあJPAで簡単にできる範囲を示さないとな。どんだけ狭いか見物だわ

318:デフォルトの名無しさん
13/03/11 22:13:39.98
>>316
>>286は「それなりに逃げ口は用意されている」から「大概のシナリオはカバーできる」
と主張してるな。「大概のシナリオ」だ、意味はわかるよな?

319:デフォルトの名無しさん
13/03/12 00:11:12.75
>>314
> ・HibernateのJPQLで複数引数のnew Xxx(a, b, c,...)は去年の夏(4.1.5)まで使えなかったw
いやそれは無いはず。JPA1.0の時代にHibernate実装でそれを使っていたから

JPAを使ったことのある身から言うと、SQLの直接記述が要件として必須なら、標準には拘らない方がいいと思う
また、JPQLをまったく使う気が無いのなら最初から止めておいた方がいい
JPA標準のNativeQuery関連は本当に使い物にならないし、SQL記述がほとんどならMyBatisで十分だろう

今はJavaの仕事していないので、最近のことについてはわからない

320:デフォルトの名無しさん
13/03/12 00:29:13.67
JPA とか吐き出されるSQLが微妙なときがあるから、変なSQL吐いてたら普通のSQLにするとか、速度的に気にしなくて良いならJPAで通すとか。各DBの方言を吸収してくれるのは便利だと思う。

321:デフォルトの名無しさん
13/03/12 01:55:03.35
hibernateから10年以上経ってて
いまだにこんなややこしい議論が必要なら
もうSQL書いたほうが早いってことだろ

322:デフォルトの名無しさん
13/03/12 09:13:52.20
でもこの差は何なんだろうね。
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)

日本ではHibernateを使いにくい特殊事情でもあるのかな。

こんなのも。
URLリンク(www.google.co.jp)
URLリンク(www.google.co.jp)

323:デフォルトの名無しさん
13/03/12 09:42:51.79
俺の考えを述べさせてもらうと
O/Rマッピングだけでも生SQLと速度差がほとんどなくなるか
そもそもオブジェクトをそのまま扱えるDBが一般的になるまで
生SQLのほうがいいと思う。

324:デフォルトの名無しさん
13/03/12 21:47:36.02
>>319
Hibernate3.6以降の話かな
URLリンク(hibernate.onjira.com)

SSHから使ってた連中は別として、今JPA使うとしたらGlassFish(EclipseLink)が多いだろ
「Hibernateならできるし(震え声)」じゃダメなんだよ
あえて標準技術を選ぶ意味がない

俺はJPA(JavaEE)への移行を却下したんで「止めておいた方がいい 」のは最初からわかってる
そんなのよりJPA推し連中からのポジティブな反論を期待してたんだがな

325:デフォルトの名無しさん
13/03/12 23:22:04.17
余談だけど、JPAと言いつつHibernate前提の話をしたり、JAX-RSと言いつつ特定実装系前提の話をするJava EE推称派は、そこんとこキッチリしてくれ。

326:デフォルトの名無しさん
13/03/12 23:34:07.08
MyBatis触ってみたがこれで十分だわ
EJBに組み込む方法も割と簡単だし

327:デフォルトの名無しさん
13/03/13 00:27:43.05
>>325
標準ですむ範囲の要件であれば標準ですませた方がよい、それだけの話では?

328:デフォルトの名無しさん
13/03/13 01:04:42.17
>>327
文盲乙

329:デフォルトの名無しさん
13/03/13 01:10:39.93
hibernateって昔、1000件DELETEするときに
1000回DELETE文が走るとかでこれは使えないと断念したことがあるのだけど
いまのhibernateとかJPAとやらはそのへんは改良されてるの?

330:デフォルトの名無しさん
13/03/13 01:13:34.55
横断的な処理をする場合はJPQLを使って処理するんだろ
JPAはSELECTがJava側から見て綺麗になるくらいで後は方言吸収くらいが利点か

331:デフォルトの名無しさん
13/03/13 11:42:57.54
Linuxサーバーって一回設定したら以後放置だよね。Windows Update + Windows Serverの方がよいよね
スレリンク(poverty板)

332:デフォルトの名無しさん
13/03/13 15:53:58.68
>>329
調査不足つか調査力不足
Hibernate2.xの頃ですらできてた

333:デフォルトの名無しさん
13/03/13 16:53:32.09
>>332
昔って書いたのに何でそういう否定の仕方するんかね。
俺が見たのは2003年ごろだよ。バージョンは忘れた。

334:デフォルトの名無しさん
13/03/13 17:18:16.36
別に1000回DELETEすることは問題じゃないと思う。
それが1回のSQLでDELETEするのと同じ速度なら。
でもまだそういう時代じゃないからO/Rマッピングは悪だと思う。

335:デフォルトの名無しさん
13/03/13 18:07:27.21
>>333
事実だから
2002年1月リリースの0.9.2からできてたことに気づけず断念とか調査力不足だろ

336:デフォルトの名無しさん
13/03/13 18:34:57.15
>>335
まさかHQLのことじゃないよね?

337:デフォルトの名無しさん
13/03/13 18:50:25.71
すり替えキタwww
少なくとも10年選手なんだろ?情けねぇ・・・
「hibernateって昔、1000件DELETEするときに」
「hibernateって昔、1000件DELETEするときに」
「hibernateって昔、1000件DELETEするときに」
どう見てもHQL使うべき場面です

338:デフォルトの名無しさん
13/03/13 19:00:25.43
できるできるってHQLのことかよ
HQL書かないといかんのなら使わんよそんなもん
隠蔽されて実行されるSQLを最適化してくれるよう
進化してるかが質問の意図だったんだが

339:デフォルトの名無しさん
13/03/13 19:09:20.82
>>338
だよな
それをわかってないんだよ
ここの奴らは

340:デフォルトの名無しさん
13/03/13 19:11:33.54
は?その意図が「1000件DELETEするときに」で伝わると思ってんの?
少なくとも10年選手なんだろ?大丈夫かお前
ついでに言っておくと、2002年の1.1からバッチ更新使うから
「1000回DELETE文が走る」も成立しない
だいたいHQL書かないならDELETE関係なくHibernate使えないじゃねーか
1000件フェッチしてくるのだって大概HQL書くだろ
idとナビゲーションだけでやるつもり?アフォですか
「10年前は未熟でした」で終わらせておけばいいものを「今も」バカだって晒してどうする

341:デフォルトの名無しさん
13/03/13 19:14:31.73
ファビョるなw

342:デフォルトの名無しさん
13/03/13 19:16:26.44
一応書いておくが、俺(340他)はHibernate使えるとは思ってない
↓がバカだと思っただけだ

> 1000件DELETEするときに
> 1000回DELETE文が走るとかでこれは使えないと断念

343:デフォルトの名無しさん
13/03/13 19:16:53.38
そもそもオブジェクトを操作するだけでSQLと遜色ない速度で
動いてくれないと意味ないんだよ。

344:デフォルトの名無しさん
13/03/15 01:16:45.46
亀レス&スレチですまん。

>>224
いまだにメインはJavaなんだけど、node.jsを使い始めてる。
フロント側をJavaScript+jQueryでやることが多くなって
サーバ側も同じ言語が使えるのは良い感じ。
ただ、JSはタイプセーフじゃないから、巨大なシステムにはまだ不安。

345:デフォルトの名無しさん
13/03/15 14:12:49.96
タイプセーフは重要

346:デフォルトの名無しさん
13/03/16 00:31:32.17
>>344-345
同じ言語を使えるってのは楽でいいね

言語の問題は置いておいて、node用のフレームワークの出来はどう?
expressだっけ?

TypeScript使えばJSも部分的にTypeSafeになるんじゃない?

347:デフォルトの名無しさん
13/03/16 00:47:09.87
Expressが必要なところでNode.jsを使ったら負けだと思ってる

348:224
13/03/16 22:53:33.58
>>344
node.jsか。レスありがとう!

349:デフォルトの名無しさん
13/03/18 20:10:52.78
Mybatisのセカンドレベルキャッシュってどこに保存されてるんだろ
Serializableを要求するからTEMPフォルダでも指定してるのかと思ったが見あたらない?
もしかしてインメモリなのか?ローカルキャッシュよりは全然遅いのだが

350:デフォルトの名無しさん
13/03/18 20:49:09.28
ああreadonlyに設定してないと読み取りの度にシリアライズが走るのか
イミュータブルにすると周囲にやや不評だろうけど安全だしそうするか

351:デフォルトの名無しさん
13/03/20 00:08:40.52
mapper XMLでinsertをする時、useGeneratedKeysを指定すれば自動採番されたIDが取得できるのは
わかってるんだけど、これって単発insertのときだけじゃないですか。
insert selectで複数行をinsertしたとき、全部の自動採番IDを取ることって出来るんですか?

352:デフォルトの名無しさん
13/03/20 01:00:57.18
生JDBCのgetGeneratedKeys()はResultSetを返すんだからできるんじゃねーの?

353:351
13/03/20 01:13:31.36
いろいろ端折り過ぎてた
spring + myBatisでPostgreSQLです
keyPropertyに指定するフィールドを配列やListにしてみたんだけどダメだったなー
生JDBCでできているてことは、自前でhandlerとか作ってやればいいのかな

354:デフォルトの名無しさん
13/03/25 11:00:30.07
O/R マッピングは便利なんだけど何を使ってもテーブル結合と集計で悩む.
Entityと1:1にならない1000SQLのために対応するDTOを1000作るのか? みたいな.
型の安全性とか名前の管理とか考えたらList<Map>よりずっとマシなんだけど数がなぁ…

355:デフォルトの名無しさん
13/03/25 11:10:09.19
あと、Tableに対応するクラスはEntityでいいとして、SQLに対応するクラスは何と定義してどのパッケージに突っ込んでる?
前者をDomainEntity, 後者をCustomizeEntityと呼んで同じパッケージに突っ込んでるプロダクトもあるみたいだけど.

356:デフォルトの名無しさん
13/03/25 11:31:00.42
だからまったくSQLを意識しなくてすむレベルまでオブジェクトにしても
パフォーマンスがぜんぜん問題にならないくらいになるまで
使うべきじゃない。時期尚早。

357:デフォルトの名無しさん
13/03/25 11:52:33.44
>>356
使わないのも選択肢としてありだと思うけど>>354-355の課題は使用有無に関わらず発生するよね
これみんなどうしてるのかねぇ

358:デフォルトの名無しさん
13/03/25 12:15:04.22
>>354
適材適所でいいんじゃないの
SQL使うほうが楽な場所はSQLで直接やればいい。
お決まりの処理で性能を満たす場合はORMで。

359:デフォルトの名無しさん
13/03/25 14:06:30.14
>>358
まったくそのとおりだと思う。
実際ORマッパには生SQLを発行できるタイプもあるし、
生SQLで検索したものをオブジェクトにマップもできる。
(マップできないようにもできる。集計やグループ化もたいていは対応してるんじゃないかな。)
SQLインジェクションにならないようにするだけでも価値があるし、
コネクションプーリングだけでも有用だと思う。
ORマッパにもよると思うがあまり毛嫌いする要素はないと思う。

360:デフォルトの名無しさん
13/03/25 14:31:52.65
SQLインジェクションとコネクションプール用途で使うには重すぎるだろ
そんなのcommonsあたりで簡単に対応できるしな

361:デフォルトの名無しさん
13/03/25 15:17:03.51
>>360
え、そんなことないよ。軽いものなんていくらでも。例えばS2JDBCとか。
マップする用途からしない用途までわざわざ書いたのはそういうことですよ。
CommonsだとCommons使わない人が出てくるのでSQLインジェクション対策としては
片手落ちだと思っています。
あえて言っておきますがORマッパを使わない選択肢は否定していませんからね。

362:デフォルトの名無しさん
13/03/25 15:36:33.34
>>359
>生SQLで検索したものをオブジェクトにマップもできる。
ここが気になるって話じゃないの?
マップできるのはいいとして、SQLに対応するクラスをSQLの数だけ作るのか、
またはList<Map<String, Object>>とかで済ませてるのか

うちは後者で統一されてて、生SQLのSELECT句に対応するDTOは作成が禁止されてる
Mapのキー管理がかなり面倒だけどクラスの数を増やしたくないらしい

363:デフォルトの名無しさん
13/03/25 15:49:27.32
>>362
あーORマッパ書いて公開しているんですが、
その手のものはいろいろ手法があって、ResultSetを便利にしたようなもの
を使ってもらうことが多いと思います。
フィールド値を取得するときにその型で取ると。
int value = result.intValue(column);
とか

> SQLに対応するクラスをSQLの数だけ作るのか
そういう手法もあります。GenericsなTuple作る手もありますね。
Scala的に書くと、
val (id, name, date) = result.get[M: (Long, String, Date)]
とか。

364:デフォルトの名無しさん
13/03/25 17:45:17.21
>>354-355
俺はある程度割り切ってクラスを共有するよ。
ざっくりとした例なので批判されるかもしれないけど
会員名、店舗名、都道府県名を格納できるDTOを用意して
会員→店舗までしかJOINしない場合もそのDTOを使用する。
都道府県名はnullなので都道府県名が欲しい場合は別のSQL使ってねと。

365:デフォルトの名無しさん
13/03/25 17:50:01.38
ありだな

366:デフォルトの名無しさん
13/03/25 18:22:48.02
ありだと思うよ
ただその場合だと複数機能で共有するだろうからパッケージに悩みそうかな
SQL書くときって機能でパッケージ分けてると共有しづらいよなー
ドメインモデリングは理解できる奴少なかったりするし

367:デフォルトの名無しさん
13/03/25 18:59:18.05
>>363
マッピングせずにResultSet(風)を触らせるのもありか
SQL発行した側はカラム名も型もわかってるはずだしな

この前久しぶりにMyBatis採用案件見たけど
これくらいシンプルな方が設計者も実装者もわかりやすくていいのかもしれないな

368:デフォルトの名無しさん
13/03/25 19:05:13.70
ようするにO/Rマッピングは現段階では不要だな

369:デフォルトの名無しさん
13/03/25 19:26:38.33
>>368
それはさすがに極論すぎて、ORマッパ以前にバグやセキュリティホールの温床になりそうです。

現状Webアプリなどの場合はORマッパがボトルネックになるより、
RDBMSの処理の方がボトルネックになることが多くて、
ORマッパの意義はむしろ昔より重みが増しているように感じられます。
#つまりCommons DbUtils使ってやれはちょっと...ということです。
#そして最近のORマッパは結構薄いラッパであることが多く、
#そんなに重たくありません。

ただ素のSQLやPLSQL/pgSQLなどの手続き言語を併用するのを
否定することではなく、バッチ処理のようなデータベースで処理だと
ORマッパ以前にフロントエンドの処理がボトルネックになることが
あると思います。その場合はそれを選択すればいいだけです。

370:デフォルトの名無しさん
13/03/25 19:37:43.30
>>369
O/Rマッパーを使わないとバグやセキュリティホールの温床になるってのは
技術職、開発会社としてどうなんだ?
俺は条件によってはO/Rマッパーが有効なプロジェクトもあると思ってるが
上記のことは本質とはだいぶ違うと思うのだが。

371:デフォルトの名無しさん
13/03/25 19:40:36.78
SQL生成用クラスを一個つくればいいよね

372:デフォルトの名無しさん
13/03/25 19:45:11.79
>>370
本質じゃないというか言いたいのは「直接JDBC触らせるな」(DbUtils含む)ということですよ。
ORマッパはDAOみたいな機構も持っていることがあるので、
それなら最初からORマッパを使えば?ということです。
そういう汎用性をちゃんと持っているという認識が必要です。

>>371
そうですね。
でもそのサポートもDAOやORマッパがやってくれますけどね。

373:デフォルトの名無しさん
13/03/25 19:48:36.82
あと聞きたいのですが、JDBCなどを使っている場合、
java.sql.PreparedStatementをちゃんと使ってますか?

374:デフォルトの名無しさん
13/03/25 20:04:13.30
SQL生成用クラスでPreparedStatementを使ってバインドしてるよ。

375:デフォルトの名無しさん
13/03/26 01:20:56.00
Javaソースの中で文字列連結しながらSQL作るようなのはダメ絶対

376:デフォルトの名無しさん
13/03/26 01:40:04.61
別にダメじゃないだろ
O/RマッパーやPreparedStatementがないと
基本的なセキュリティ対策すらできないことのほうが問題
Javaじゃないと作れない人になってしまうよ

377:デフォルトの名無しさん
13/03/26 02:09:42.74
JavaスレだからJavaソースと書いたがどの言語でも同じ
ただしSQLを組み立てるライブラリは除く、を書き忘れた
アプリで文字列連結しながらSQL作るようなのはダメ絶対

378:デフォルトの名無しさん
13/03/26 05:36:16.05
>>376
PreparedStatementを積極的に使わない理由が思いつかない。
動的SQLなんて大抵の言語とRDBMSで使えるでしょ。
Javaじゃないと作れない人になってしまう理由がない。

379:デフォルトの名無しさん
13/03/26 07:38:05.65
>>376
他の言語もJDBCに相当する機能では、今はPreparedStatement的な手法が主流だし問題ないと思う

380:デフォルトの名無しさん
13/03/26 11:20:44.10
昔は、文字列と、変数の配列(リスト)の2つを受け取って、
SQLをStringBuffer(StringBuilder)で連結しつつ、 ? を埋め込んで、
PreparedStatement 発行したもんだ。

381:デフォルトの名無しさん
13/03/26 12:31:12.72
オープンソースJava O/Rマッピングソフト一覧(2013年1月版) | Unofficial DB2 BLOG
URLリンク(db2.jugem.cc)

382:デフォルトの名無しさん
13/03/26 22:37:34.34
PreparedStatementってDBサーバ側の機能だからな
>>376の発想がおかしい

383:デフォルトの名無しさん
13/03/27 05:23:30.46
>>382
「Javaじゃないと作れない人になってしまうよ」と言っている当人がJavaでしか作ったことがないパターンでは。

384:デフォルトの名無しさん
13/03/27 08:43:10.56
DBとのやり取りにDAOパターンを採用するとき何をどこに入れるかってどうすることが多い?

(1) Aテーブルに対する主キーでの1件取得、全件取得、挿入、更新、削除などの基本的な操作
(2) Aテーブルに対する業務に特化した操作(他業務で使うことはない)
(3) 複数テーブルを結合する複数業務で利用する操作

うちの周りだと下記のようにすることが多いんだけど、保守フェイズに入ると(3)が問題になりがちなんだよね
(1)は全テーブル分用意して共通パッケージに突っ込んでる
(2)は業務ごとにパッケージとDaoクラスを作成してそこに突っ込む
(3)は代表的なテーブルのDao(上記1に該当するもの)に突っ込んで他の業務でも使う

385:デフォルトの名無しさん
13/03/27 08:52:59.87
開発の規模によるがうちなら⑴と⑶だけかな
⑵は他の業務から使えないのが微妙

386:デフォルトの名無しさん
13/03/27 08:54:46.69
問題の内容忘れてたわ…

問題1. どの業務が使っているかわかりにくいから触るのが怖い
問題2. 最初は(2)のパターンだったけど改修の結果(3)のパターンになった時に共通パッケージに移動しづらい
(移動すると共通Daoを触る全業務の再テストが必要になる)

個人的には問題1はお前保守なんだから調査しろよ、
問題2はそこの客の方針がそうなら移動諦めて各業務Daoで重複させるか再テスト頑張れよ
って思ってて、実際そう伝えたんだけど納得されなくてなあ…

銀の弾丸はなかなかないんだよ

387:デフォルトの名無しさん
13/03/27 09:12:01.84
結局生SQLが一番いいという結果になるな

388:デフォルトの名無しさん
13/03/27 11:55:44.21
>>382
その上「基本的なパフォチューすらできない」っていうねw
SQLがどうやって実行されるか気にしたこともないんだろうな

389:デフォルトの名無しさん
13/03/27 11:58:16.26
結局SQLがどうやって実行されるか気にしなければならない
O/Rマッパは使わないほうがいい。

390:デフォルトの名無しさん
13/03/27 12:49:51.63
>>388
なんでセキュリティ対策のこと書くとパフォーマンスチューニングについて
わかってないことになるの?議論がめちゃくちゃ

391:デフォルトの名無しさん
13/03/27 13:35:29.45
前から言ってるけどO/RマッパやDAO、DSLか生SQL、どれを選択するのかは使う用途によると思う。
その前提がなくただO/Rマッパは使わないほうがいいというのは、少なくとも今のトレンドに
あっていないことも自覚すべきじゃないかと思う。
#特に国内と国外との違いにいつも愕然とするんですよね。

SQLやその実行過程を理解しガリガリにチューニングしなければならないというのも間違っていないし、
そしてO/Rマッパを使って抽象化・簡略化するのも間違っていないと思う。
何が目的でどういう手段を使うべきかをもうちょっと考察して議論したほうがいいと思う。

PreparedStatementを例に出したのはちょっとしたトラップで、
* PreparedStatementの利点を理解しているか?
* そもそも(たいていの場合)PreparedStatementを直接書くのが間違っているのを認識しているか?
を知りたかったからです(すみません)。

392:デフォルトの名無しさん
13/03/27 14:38:38.18
でもJavaの用途はWebがほとんどだからパフォーマンス重視なのは
仕方ない。だから生SQLが一番いい。

393:デフォルトの名無しさん
13/03/27 14:49:37.60
>>392
興味本位で聞くのですけど、O/Rマップってどのくらい遅いのですか?
具体的にベンチマークしましたでしょうか?
#「あおり」じゃないので興味あったらで。

十分選択肢に入るくらい軽くなってますよ。
#さらにいうと生SQLも書けるのですが(例えばMyBatis)。

394:デフォルトの名無しさん
13/03/27 15:02:22.39
O/Rマッピングはアンチパターン? | スラッシュドット・ジャパン デベロッパー
URLリンク(developers.slashdot.jp)

395:デフォルトの名無しさん
13/03/27 15:14:44.15
>>393
びっくりするほど遅い。んで生SQLに書き直さないといけなくなる。
せめて生SQLにしないといけない割合が全体の1割未満なら使ってもいいけど
実際のプロジェクトではマスタメンテのような機能以外は
生SQLになってしまうので使い物にならない。

396:デフォルトの名無しさん
13/03/27 15:29:57.81
どういうケースでどんな理由で遅くなるのか具体例が欲しいな。

397:デフォルトの名無しさん
13/03/27 15:40:04.67
>>395
(また言いますけど煽りじゃないです。O/Rマッパ開発者としては現状認識を知りたい。)
生SQLをO/Rマッパに使ってもですか?

私の思う生SQLやストアドプロシージャを使う場面は、
* 長大で複雑ななクエリ(検索)
* バッチ処理など、検索以外にも挿入や更新が多い処理
だと思うのですけど、そういうケースですか?
あとO/Rマッパ(名前およびバージョン)に何使ったのかも気になりますね。

一般的なケースだとあまりボトルネックにならないのですが...。特にWebアプリだと。

>>395
そうそう気になりますよね。参考になりますし。

398:デフォルトの名無しさん
13/03/27 16:47:15.90
RailsみたいにORマッパに適したテーブル設計ができていれば、
結構不都合無いパフォーマンスになるんですけどね。
IOの激しいWeb系とかゲームだと設計的に厳しいし、
がちがちの業務系だとそういう設計のできないアホなSEばっかだし、
そもそも設計をフレームワークに合わせるのか、とか不毛な議論が始まるので。。。
小規模なアプリをサクッと作る場合には便利なんですけどねぇ。

399:デフォルトの名無しさん
13/03/27 17:42:51.07
社内システムならDBの負荷はたかがしれてるから
ORM使っても性能上の問題ないよ
開発スピードも上がる。

パフォーマンスが大きく変わるのはメモリ上にDBのデータが
のっているかどうかだろう

WebサービスであってもほとんどORM使って問題ないと思うし
本当に性能が必要な場面はストアドプロシージャ使えばSQLより速くなる。

必死にORM否定してる人は使い方が分からないか、
使いどころがわからないだけ

400:デフォルトの名無しさん
13/03/27 17:50:31.65
ストアドプロシージャは使いたくないです。

401:デフォルトの名無しさん
13/03/27 18:09:34.30
まぁ2:8の法則だわな。
8割の処理はORMで十分だし、利用頻度が高かったり負荷の高い2割の処理は生SQL。
ってのが常道だと思う。
俺がよく使ってるのはHibernateJPAだけど、速度的には不満は無いね。
むしろDBにきちんと索引張ったり外部キー設計する方が大事だと思う。

402:デフォルトの名無しさん
13/03/27 21:02:46.76
ORMいらない、と言っている人間ははよくわからんな。
Micro-ORMで十分、なら理解できるが。

403:デフォルトの名無しさん
13/03/27 21:14:49.27
ORMと一括りにして議論している時点で程度が知れてる、というべきだな。

404:デフォルトの名無しさん
13/03/28 00:33:47.55
同じSQLでO/Rマッパーだけ遅いなら外すしかないね。
内部のリフレクションとかが遅いんじゃないの?

405:デフォルトの名無しさん
13/03/28 01:24:46.14
問題になる遅さなのそれ。

406:デフォルトの名無しさん
13/03/28 01:29:38.75
生SQLとかORMいらないとか連投してるのは荒らしだろ
現実的にはこのどっちか

・SQLを暗黙的に発行することがあるHibernate含むJPA系のORM
・プログラムで指定したとおりのSQLを発行するMyBatisやSeasar系などのORM

407:デフォルトの名無しさん
13/03/28 14:06:46.51
生SQLの定義がわからんね
SQL*Plusなんかで直接実行できるSeasarの2way SQLは生SQLなのかどうか

408:デフォルトの名無しさん
13/03/28 14:32:20.33
フレームワークが勝手に作ったSQLを発行するんじゃなくて、
開発者が書いたSQLを流すのが生SQLでいいと思う

MyBatisとかDOMAとかの生SQLベースのマッピングはめんどくさいところもあるけど入門編にはいいと思うわ

409:デフォルトの名無しさん
13/03/28 14:41:14.77
だとするとJPA系を除く多くのORMは生SQLが主なんだが
生SQL君が言いたいのはORMイラネじゃなくJPAイラネなのか?
ORMイラネ君と同一人物かと思ってたんだが

410:デフォルトの名無しさん
13/03/28 14:49:50.56
>>407 >>409
ORMはSQLを生成して、SQLを投げるだけだよ
複雑なJOINしない限り、ほとんど性能は落ちない。

生SQLってのは自分でSQL文を書くってことだろう
JPAもORMの一種

ORM要らないって連呼してるひとは、
上のほうでフレームワークも要らないと必死に主張していたひとと同一人物だと思う。

411:デフォルトの名無しさん
13/03/28 15:07:49.10
>>410
自分で書いたSQLをORMで実行した場合も生SQLだとしたら、
生SQLが必要だからORMイラネってのはおかしいという話
生SQLが主のORMもたくさんあるわけだから
生SQL君とORMイラネ君が同一人物かどうかはしらんけど

412:デフォルトの名無しさん
13/03/28 18:43:58.87
俺は生SQL書きやすいORMならOK派かな。
Hibernateみたいなのは勘弁。
フレームワークも不要。

413:デフォルトの名無しさん
13/03/28 20:20:44.35
MyBatis+標準SQL(SQL92あたり)でいいわ

414:デフォルトの名無しさん
13/03/28 22:50:54.10
まぁ日本の開発現場ではNIH症候群が蔓延してるからな。
車輪の再発明大好きだし。

415:デフォルトの名無しさん
13/03/29 00:30:58.37
おれもMyBATIS+SQLだな
学習コスト少なめだし、バグがあっても追いやすいし
裏で動的にSQL生成してるようなフレームワークで
いい思いをしたことがない

416:デフォルトの名無しさん
13/03/29 05:58:23.38
SQL方言だけ吸収してくれれば

417:デフォルトの名無しさん
13/03/29 07:20:01.88
Hibernateかなぁ。
幸い個々のエンティティに関して比較的単純なCRUDしか必要が無いのでMyBatisでSQL書いた
ところでHibernateが生成するSQLとあまり大差無いものを書くことになったり。

個人的にはエンティティ引っぱってくるときに射影相当の演算や、関連を引っぱってくるのを
LazyにするのかEagerにするのか、固定ではなく場面に応じて簡単に指定出来ると有り難い。
HibernateだとCriteriaに頼ることになるので面倒。

418:デフォルトの名無しさん
13/03/30 09:24:08.73
>>415
どれでも発行SQLだけ確認やログ出しも出来るし
2WAYならチェックした上でマズいの手書きできる
フレームワークで統一性のない動的生成ルールが面倒だけどな

それよりもDTO周りの議論に戻ってくれ
俺も今DTO増殖中で疲れてる

419:デフォルトの名無しさん
13/03/30 10:34:49.59
DTOはある程度割り切って共有で結論出てなかったっけ
割り切り共有+継承+テーブル定義とにらめっこ、
すればそこまで増殖しないと思うが。

420:デフォルトの名無しさん
13/03/30 13:05:35.15
DTOのクラスが増えるのが嫌なら、全部Mapに突っ込んでしまえば?w

421:デフォルトの名無しさん
13/03/30 13:07:19.28
Mapでええやろ

422:デフォルトの名無しさん
13/03/30 13:37:01.55
mapでいいならJavaじゃなくていいだろ
getterがあるからキーの文字列を意識しないで済んでるのに

423:デフォルトの名無しさん
13/03/30 19:32:32.72
MapとDTOは使い分ければ良いと思うけどなぁ。

424:デフォルトの名無しさん
13/03/31 10:16:31.71
Java系のフレームワーク、海外ではGrailsがすごい人気高くて驚いた
Java系だとGrailsはトップ3に入ってる

Java系でサクサク開発できるのはGrailsとPlayみたいだ
Javaの方言のGroovyだからといってGrailsを敬遠しないほうがよさそう

425:デフォルトの名無しさん
13/03/31 11:10:40.80
GroovyはJavaの資産は使えるなら積極的に使おうって姿勢かな

426:デフォルトの名無しさん
13/03/31 22:08:24.97
GroovyはJavaの方言というかJavaプラスアルファぐらいに考えた方が良いと思う。
Javaの文法にRuby風の文法やメソッドも付け加えた感じで、両方を混ぜて書ける。
JavaとRuby両方の素養がある人だとすごく便利だと思うよ。

Grailsだと根っこのドメインロジックはJava風にカッチリ書いたりそれこそJavaとして書いて、
逆にGSP(Grails版JSPみたいなもの)に埋め込むコードとか簡単なコントローラーはGroovyの
文法駆使して簡単に書く。

427:デフォルトの名無しさん
13/04/01 00:51:09.20
Groovy、Rubyほどギークでもない人でもゆるく書けるし、scalaより難しくないので、もっと流行ってもいいと思うんだけどな。
といいつつ周りではやっとこさ少しずつ広がってきて、以下のようなことをやるような人が増えてきた。
→納品物(webアプリケーション本体)はJavaだが、UTコード、内部ツールはGroovy、など。
 ビルドはgradle、とか。

といいつつRubyに素養がある人はRubyでやっちゃうんだよな。

428:デフォルトの名無しさん
13/04/01 02:41:51.01
JavaのView層はいつまでも安定しないね
似たようなコードの書き方、次から次に覚えないといけないのはきつい
他の言語はほとんど安定してるのになあ

429:デフォルトの名無しさん
13/04/01 03:21:29.18
Grailsは確かにもっと流行っても良い気はする。
会社でやっているプロジェクトも最近ようやくGrails2.2.1にバージョンアップして依存性管理を
Mavenに移行出来たので他のプロジェクトとの連携がよりやりやすくなった。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4389日前に更新/201 KB
担当:undef