These are chat archives for scalikejdbc/ja

26th
Oct 2014
Manabu Nakamura
@gakuzzzz
Oct 26 2014 04:57
もう家出ないとなので、日本語で。

tototoshi さんの tryLocalTx とか eitherLocalTx とかあると混乱しそうという指摘をもらって、それはそうだなーという感がしてるので、今はあんまり tryLocalTx とか個別に生やすのは否定的な感があります。

個人的には、 今の generalizedLocalTx を localTx にしてしまい、anyTxBoundary を LowPriorityImplicits で提供し、 eitherTxBoundary のLeft型パラーメタ を Throwable に限定するのがいいんじゃないかと思っています。

Kazuhiro Sera
@seratch
Oct 26 2014 05:05
うーん、それも理解は出来ますが、マイナーアップデートでやることではないですね。その方向にする場合 futureLocalTx を deprecated にしてかつ(一応)localTx の挙動が変わってしまうということをちゃんとアナウンスする必要があると思います。
Kazuhiro Sera
@seratch
Oct 26 2014 05:10
しかし、それって本当に混乱するのでしょうか。Try[A] で failed のときに rollback させたいというケースでは localTx ではなく tryLocalTx か generalizedLocalTx[Try[A]] を使ってねというのは分かりやすいという考え方もあるかと。むしろ localTx が戻り値型によって挙動が変わるという方が一貫性がなくて混乱するようにも思えます。
違うな。Either[A, Throwable] なら例外が発生しているという意味では一貫性があるのか。
これがあるのかどうか問題?>「Try[A] で failed のときに rollback させたくない
Kazuhiro Sera
@seratch
Oct 26 2014 05:31
ちょっと考えてみたけど、意図してそんなことをしたいというユースケースはなさそうですね。そう考えると @gakuzzzz さんのアイデアはよさそうに思います。ただ、既存のアプリケーションコードでその挙動に依存して結果的に意図通りに動いているものはあるかもしれない。2.2 で futureLocalTx を deprecated にして 3 つの型は tx 制御が入るという仕様変更を issue で propose するところからかな。
Kazuhiro Sera
@seratch
Oct 26 2014 06:15
とりあえずこんな感じで。 scalikejdbc/scalikejdbc#302
Tsukasa Kitachi
@kxbmap
Oct 26 2014 06:18
:+1:
Manabu Nakamura
@gakuzzzz
Oct 26 2014 06:37
そう、今 localTx を変えちゃうと互換性が崩れちゃうのでやるならメジャーアップデートで、ですね。
思うのは、ユーザ側に、localTx、 futureLocalTx、 tryLocalTx、eitherLocalTx を使い分けてね、 っていうのはけっこう API の把握力を要求されてユーザーフレンドリーさからは遠ざかってしまうのかな、と
Toshiyuki Takahashi
@tototoshi
Oct 26 2014 06:39
今後こういうのがある度にnantokaLocalTxが作られていくのか...と思っていやなんですよねえ。
either ばりばり使う人はむしろ scalaz.Either のほうを使ってそうだし。
kenji yoshida
@xuwei-k
Oct 26 2014 07:10
えー、 localTx は今のままで変えなくていいと思うけどなー
Tsukasa Kitachi
@kxbmap
Oct 26 2014 07:23
あー……、ユーザー定義のエラーでロールバックしたいのにTxBoundaryのimport忘れたら、エラーにならずanyTxBoundaryが使われてしまうか。
anyTxBoundaryはimplicit提供せずにlocalTxの中で使うに留めて、generalizedLocalTxは残すのがいいかな
ただgeneralizedLocalTxって名前長いのがやだなーって思ってる
Manabu Nakamura
@gakuzzzz
Oct 26 2014 09:00
あー 確かに import忘れで事故る可能性はありますね。それは問題か
Kazuhiro Sera
@seratch
Oct 26 2014 09:02
確かに名前長いなとは思いますね。localTxFor[A] にするのはどうでしょう。そしたら futureLocalTx を deprecated にして localTxFor[Future[A]] を使ってくれ、というのもありなきがする。
Kazuhiro Sera
@seratch
Oct 26 2014 09:45
実際書き換えてみると DB.localTxFor { } みたいに型指定を省略できるのでなんのことかわからない。
Toshiyuki Takahashi
@tototoshi
Oct 26 2014 09:57
localTx: 各駅停車つくばエクスプレス
futureLocalTx: 未来の各駅停車つくばエクスプレス
KAWACHI Takashi
@tkawachi
Oct 26 2014 09:58
:grin:
Kazuhiro Sera
@seratch
Oct 26 2014 10:07
短くはならないけど DB.generalizedLocalTx よりも DB.localTxForReturnType の方が良い気がしてきた。generalizedLocalTx って controlLocalTx の改善案として出した名前だけど、こうして使ってみると何だかよくわからなかった。
ただ generalizedLocalTx って localTx の上位互換なので forReturnType だとそれはそれで語弊がある。
Kazuhiro Sera
@seratch
Oct 26 2014 10:25
でも他に思いつかないな。forReturnType だけどかといって例外が投げられちゃった時に commit されても困るでしょっていうことで。
Manabu Nakamura
@gakuzzzz
Oct 26 2014 13:08
localTxFor いいと思ったけど確かに大抵は型指定しないから意味わからないか……
Tsukasa Kitachi
@kxbmap
Oct 26 2014 14:55
localTxForいいと思います。型指定しなくても引数に対して言ってると思えば。
localTx for execution ってことで