PoEAA 9.1章

PoEAA輪読
0
mtoyoshi @mtoyoshij

皆さんも是非「DI トランザクションスクリプト」とか「トランザクションスクリプトvsドメインロジック」でググッてみて。 RT @chipstar_light: 「DIコンテナがTSとドメインモデルのどちらに向いてるのか」って議論が活発に行われていた事実を今日の輪読で知った。

2010-05-14 22:51:58
Takuya Kitamura @chipstar_light

@mtoyoshij 俺はDIコンテナを、オブジェクトの振る舞いを切り替える標準的なインターフェースという理解ぐらいしかしてなくて、大規模開発体制下におけるドメインロジックレイヤに適用する場合はみたいな考えをあまりしてなかったな。

2010-05-14 10:03:33
Takuya Kitamura @chipstar_light

@mtoyoshij ただ、「DIコンテナがTSとドメインモデルのどちらに向いてるのか」って議論が活発に行われていた事実を今日の輪読で知った。今ググってみても一杯出てくる。それを見て、ドメインモデルでも利用できなくないけど、TSに利用しやすい仕組みだって事はわかった。なるほどー。

2010-05-14 09:57:27
Takuya Kitamura @chipstar_light

「生成できるのはステートレスオブジェクトだけ」というのはあってると思う。生成後にステートフルにする事はもちろんできるけど。 RT @mtoyoshij:...

2010-05-14 09:51:15
mtoyoshi @mtoyoshij

もちろん、ステートフルでもいい。俺の前提はDIが生成できるのはステートレスオブジェクトだけという制約があるという理解なんだけど、もしかして違う!?それならかなり嬉しい RT @chipstar_light: 俺は別にDIで生成されるオブジェクトがステートフルでもいい気がするけど。

2010-05-14 08:03:07
huskyhead @huskyhead8080

#EAA9_1 (P122)最後の3行がポイントと思った。もっと複雑になったらサービスのロジックが膨らむだけだから設計が破綻していくと。

2010-05-14 06:11:00
huskyhead @huskyhead8080

#EAA9_1 サービスは3つの計上方法別に収益計算をしている。

2010-05-14 06:10:55
huskyhead @huskyhead8080

#EAA9_1 ゲートウェイはDBアクセスでSQL結果取得。

2010-05-14 06:10:47
huskyhead @huskyhead8080

#EAA9_1 (P119)ゲートウェイとサービスで収益計算をしている

2010-05-14 06:10:39
huskyhead @huskyhead8080

#EAA9_1 (P118)収入の計上方法が多様な場合の例。ここでは3つの計上方法が例とされている。

2010-05-14 06:10:31
huskyhead @huskyhead8080

#EAA9_1 (P117)そんな中でもシンプルなロジックは一部で存在するので、そこにTSを利用する(?)

2010-05-14 06:10:24
huskyhead @huskyhead8080

#EAA9_1 ドメインモデルがあまり理解できていないから、具体的に比較できないけど。。

2010-05-14 06:10:16
huskyhead @huskyhead8080

#EAA9_1 (P117)TSの長所はシンプルさ。ただ複雑なロジックになるとTSでは限界があるから、ドメインモデルの構築を検討する。

2010-05-14 06:10:08
huskyhead @huskyhead8080

#EAA9_1 (P116)スクリプトを複数にする方法は単純に1つのクラスに処理を纏める場合と、呼び出し方法を統一する為にコマンドパターンにする場合。

2010-05-14 06:09:59
huskyhead @huskyhead8080

#EAA9_1 (P116)まずはスクリプトのコード化はそのままやればいい。問題はスクリプトをどこに置くかという事。

2010-05-14 06:09:48
huskyhead @huskyhead8080

#EAA9_1 いきなり分かりにくくなったけど何とか頑張ります

2010-05-14 06:09:35
ricymst @ricymst

#EAA9_1 このパターンは、1つのトランザクション(ドメインロジック+SQL)に着目して、手続き型で処理をごりごり書くかんじでいいのかな?

2010-05-14 02:40:25
Takuya Kitamura @chipstar_light

#EAA9_1 確かに差し替えたい部分は振る舞いだけど、ドメインモデルでもモデルの振る舞いをかえるためにDIを使うっていうのは妥当な気がするんやけど、どうなんでしょう。

2010-05-14 01:31:00
Takuya Kitamura @chipstar_light

そうなんかな?俺は別にDIで生成されるオブジェクトがステートフルでもいい気がするけど。 RT @mtoyoshij: #EA9_1 DIから生成できるオブジェクトはステートレスで、それゆえに生成されるオブジェクトの種類はロジッククラスとなる。

2010-05-14 01:28:26
Takuya Kitamura @chipstar_light

#EAA9_1 まぁここで言いたいのは命令をコマンド化する事よりは、スクリプトを定型的なインターフェースで体系化する事が目的のようだけど。

2010-05-14 01:24:57
Takuya Kitamura @chipstar_light

バッチプログラムなど、リランが必要なドメインロジックならコマンドパターンがいいのでは? RT @XY_kyo: #EAA9_1 「トランザクションスクリプトを複数のクラスに体系化する方法は2つある」の中の「コマンドパターン」って使われるのはどういうケースかなぁ…

2010-05-14 01:20:10
Takuya Kitamura @chipstar_light

#EAA9_1 うちの会社の開発は、TSでドメインロジックを組んでるね。ドメインモデルで組んでるSIを見た事が無い。手続き型に近いからかな。目の前の実現したい処理を中心に考える傾向があるので。

2010-05-14 00:59:43
Takuya Kitamura @chipstar_light

確かにそうだ。 RT @mtoyoshij: #EAA9_1 ロジック抽出の主眼をどこにおくかというのがポイントやね。トランザクションスクリプト(以下、長いのでTS)は処理に主眼をおくパターンやね。ゆえに、とっつきやすい。

2010-05-14 00:52:13
河野秀樹 @nangoku_skier

#EAA9_1@XY_kyoコマンドパターンを適用してもうまく解決するのは難しそうな気がする。所詮メインプログラム的なので小規模な場合のみ適用かな。

2010-05-14 00:39:35