トップページ⇒tech
1001コメント376KB

国産DIコンテナSeasarとくーす その3

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
一部で話題になっている国産オープンソースDIコンテナSeasar V2(略してS2)。
ってどうよ?みんなもう使ってるの?
使用経験とか、実戦配備情報とか、つかえねーよボケ、とかいろいろ書いてね。

あと、開発プロセス「くーす」の話題もこちらでどうぞ。


本家 seasar.org
http://www.seasar.org/

Seasar Projectグループ
http://seasarproject.g.hatena.ne.jp/

ひがやすをのここだけの話
http://d.hatena.ne.jp/higayasuo/


前スレ
その1 http://pc5.2ch.net/test/read.cgi/tech/1092044210/
その2 http://pc5.2ch.net/test/read.cgi/tech/1098885253/


関連スレ(なのか?)

Java Spring Frameworkを語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1077465099/
0210デフォルトの名無しさんNGNG
なんで? もう語ることないじゃん。
手続き型マンセー、Transaction Script上等って結論じゃなかったか?
0211デフォルトの名無しさんNGNG
でもSQLだけは勘弁な
0212デフォルトの名無しさんNGNG
エンティティの責任は、データを保持することなので、それ以上の責任を押し付けてはいけません。
0213デフォルトの名無しさんNGNG
給料が社員によって決まるとしても、社員には給料を決める権限などないのです。
給料計算は、給料計算担当者が。
0214デフォルトの名無しさんNGNG
>>211
Aチーム、なつかしーなおい。
0215デフォルトの名無しさんNGNG
>211はコング
0216デフォルトの名無しさんNGNG
>>213
社員は
-自分の役職
-役職からの給与算出方法
のみを知っていれば「権限」などなくても給与計算できます。
よって給与計算担当者は必要ありません。

もちろん、コンテキストによっては給与計算担当者が必要になることがあるかもしれないことは否定しませんが。
0217デフォルトの名無しさんNGNG
>>216
で、社員ひとりひとりに自分で給与計算させる会社があるの?
モデリングとは話が違うかもしれんけど、社員を渡せば給料が返ってくる、給与計算者がいるほうがいいと思うなぁ。
0218デフォルトの名無しさんNGNG
>「社員の給与は社員の役職によってのみ決まる」

この前提がそもそも非現実的で意味無し。
0219デフォルトの名無しさんNGNG
>>218
サンプルコードに何を求めてるんだろう?
0220デフォルトの名無しさんNGNG
現実的なコードじゃない?
あした使えるコード。
あさって納品できるコード。
0221デフォルトの名無しさんNGNG
サンプルコードに関して、>>216-217のような話は無意味では。
「社員が持つべきケースのサンプル」
と、「計算担当者が持つべきケースのサンプル」があるだけ。
0222デフォルトの名無しさんNGNG
で、社員が持つべきケースなんてほとんどないから、意味がないというかサンプルとして有害じゃないの?
0223デフォルトの名無しさんNGNG
だれが、社員と給与で例を示したんだ?
そいつのせいでスレ違いな書き込みばかりになってるじゃないか!
0224デフォルトの名無しさんNGNG
Seasarもくーすも、話題にするような目立った動きないから、いいんじゃない?
ログ見ても、ナイーブがどうこうとか、某blogのアイドル写真がそろそろ邪魔くさいとか、あまりスレタイとは関係ないし。
0225デフォルトの名無しさんNGNG
>>223
どうやらファウラーらしい
0226デフォルトの名無しさんNGNG
>>156の
> 正解がないだけに色々と人によってまちまちになっちゃうから
> いっその事統一ルールで、データの振る舞いは
> 全部分けちゃえって話だと読みましたがどうでしょう。

に賛成。
債務とか責任とかを考えて適切な場所に処理を記述とか考えていくと、いろいろなところにコードが分散してしまって、追えなくなってしまう。
DBのViewとかトリガーとかまで考えて適切な場所に処理を記述していくと、もう、どうしようもなくなる。
0227デフォルトの名無しさんNGNG
View やトリガーがあると追えない?
維持すべき設計文書を書いてないだけじゃないかな。
0228デフォルトの名無しさんNGNG
そうすると、一ヶ所に処理を記述したときには、そのソースだけを見ればよかったのが、設計文書とViewなりトリガーなりとJavaのソースと、いろいろなところを見ないといけなくなるわけですね。
しかも、設計文書とJavaソースとViewやトリガは、見るためのツールが違うので、煩雑に。
それだけ追うための手間が増えるわけですよ。

修正の場合も、設計文書を必ず修正する必要があって、この作業は徹底するのにかなりの労力を伴う。
単純に比較すれば、一ヶ所で記述した場合にくらべて、労力自体は増えると思うのですよ。
とくに、設計文書管理の労力。
0229デフォルトの名無しさんNGNG
で、問題はくーすでたびたび話題になってる、作業に関わる人のレベルが一定ではないということですね。
実際には、問題になるのは、レベルではなくて、考え方で。
むしろレベルが高い、考え方の違う人が書いたシステムが非常に追いにくくなるわけで。
システムを追う前に、どのような考え方で書かれたのかをプロファイリングしないといけない。
0230デフォルトの名無しさんNGNG
ドキュメントは非常に儚いので、アプリケーションの枝葉がドキュメントに依存するのは、問題があるんじゃないかと。
アプリケーション独自のロジックに関しては、ドキュメントがなくてもわかるようなものが理想で。

ただし、アプリケーションの骨格がドキュメントに依存するのは仕方がないと思う。
でも、アプリケーションの骨格は、揺るぎにくく共通化しやすいから、その部分をみんなで使えるようにしましょう、と。
で、そのアプリケーションの骨格のドキュメントが、くーすなのかなぁと思う。
0231デフォルトの名無しさんNGNG
シンプルなオブジェクトを複雑に組み合わせるのと、複雑なオブジェクトをシンプルに組み合わせるのと、どっちがいいんだろう?
0232デフォルトの名無しさんNGNG
>>226
> に賛成。
> 債務とか責任とかを考えて適切な場所に処理を記述とか考えていくと、いろいろなところにコードが分散してしまって、追えなくなってしまう。
> DBのViewとかトリガーとかまで考えて適切な場所に処理を記述していくと、もう、どうしようもなくなる。

債務(さいむ)じゃなくて責務(せきむ)な。
0233デフォルトの名無しさんNGNG
ドキュメントが儚い?
恥ずかしげも無くよく言えるな、おい。
XPerもどきの増殖にも困ったもんだ。
0234デフォルトの名無しさんNGNG
>>233
数度の変更を経たにもかかわらず、ちゃんと同期しているドキュメントをみたことがない。
0235デフォルトの名無しさんNGNG
俺も無い

0236デフォルトの名無しさんNGNG
233は、よほど躾の行き届いた組織にいるらしい。
うらやましいな。
0237デフォルトの名無しさんNGNG
ActionFormにインジェクションできますか?
0238デフォルトの名無しさんNGNG
見た事がないというか、出来た事がない_| ̄|○|||
先ず書く、そして打つという手順を守りさえすればそんなはずはない
と上司は言うけれど・・・・・・・・
短期で動くモノを差し出せとせっつかれて、それどころじゃないのです。

アジャイルって本当に素晴らしいモノなのかな?なんか週間連載を
抱えた漫画家みたいって言うか、納期が短い間隔で何回もやってく
る感じで、昔よりも寧ろ過酷になってる様な気がするんですが・・・・・
0239デフォルトの名無しさんNGNG
ここはサンデープログラマのスレですか?
0240デフォルトの名無しさんNGNG
234はSCMをしないPRJにしかいたことがないようだな。
変更管理をきっちりすれば同期問題はおきないぞ。
0241デフォルトの名無しさんNGNG
>>240
だから、変更管理をきっちりしてる
プロジェクトで仕事した事がない、って話なんです。
ちっこい案件は別だけど。
0242デフォルトの名無しさんNGNG
>>241
PMがマヌケということか。同情するよ。
まぁ、悲観するな。そのうちまともなPRJに出会えるから。
0243デフォルトの名無しさんNGNG
>>240
構成管理をきっちりしないと、同期問題がおきるってことでしょ。
で、構成管理をきっちりすることは、組織的な成熟度が高くないといけない。
適用しやすい開発方法論を考えるのなら、
「こうやればうまく開発できます。でもドキュメントが大切なので、構成管理はきっちりやってください」
というものはどうかと思う。

構成管理がきっちりできるなら、他の能力も高いことが多いから、どうとでもやってくれという感じ。
0244デフォルトの名無しさんNGNG
             ___
.            |(・∀・)|
.            | ̄ ̄ ̄   ジサクジエン王国
         △
        △l |
   __△|_.田 |△_____
      |__|__門_|__|_____|_____
0245デフォルトの名無しさんNGNG
データと振る舞いは別クラスにすべき、と言っている人たちは
TheBlobを避けるためにPoltergeistに向かっているように思うなー。

The Blob
http://www.antipatterns.com/briefing/sld024.htm

Poltergeist
http://www.antipatterns.com/briefing/sld030.htm
0246デフォルトの名無しさんNGNG
結局、適材適所
だからフレームワークは無用
プログラミングしよう
0247デフォルトの名無しさんNGNG
243は、ある程度の規模のPRJで構成管理をやらなければ開発は頓挫するという事実が理解できていないようだ。
まぁ、わからないでもないよ。最近は知ったかぶりのアジャイル莫迦が多すぎるからな。
JAVAWORLDも酷い記事を書くやつが増えたが、編集は何をやっているんだか。
0248デフォルトの名無しさんNGNG
>>247夜釣りご苦労。
0249デフォルトの名無しさんNGNG
ちなみにくーすの元ネタICONIXは、シーケンス図とかの中間成果物は
使い捨てで、ソースコードとの同期はやらないんだよね。
0250デフォルトの名無しさんNGNG
あれ?
捨てはロバストネス図じゃなかったっけ?
0251デフォルトの名無しさんNGNG
あれ?
捨てはロバストネス図じゃなかったっけ?
0252デフォルトの名無しさんNGNG
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
0253243NGNG
元の話にもどすと、サーブレットフィルターやAOPやDBのトリガーなど、コードに現れない形で処理が分散するときには、ドキュメントを同期したにしても、ドキュメント自体が分散しがちで、結局わけがわからなくなりそう。
もちろん適切に使えばよいけど、一度乱用する時期を経ないと適切に使えないと思う。
プロジェクトの発言権を持った人の中に乱用する時期の人がいる可能性も高い。
0254243NGNG
まとめれば

「ドメインモデルは、複雑なコードを整理しやすいのがメリットだ。
ただ、開発者にとって理解しにくく、またRDBMSとのマッピングが複雑になる。
そこで、ORマッピングレイヤを設けなくてはならない。
そのため、ドメインロジックがシンプルな場合は、トランザクションスクリプトを採用した方がいい。」

ということだ。やっぱファウラータンは俺のために言葉を用意してくれてて偉いな。
ttp://www.ric.co.jp/sol/contents/sol_0407/sol_architect.html
0255デフォルトの名無しさんNGNG
>>254
そんな考えはレガシーで、ドメインモデルは複雑な
ロジックを記述するには向かない
という考えってどうよというのが先週からの話。
少しは流れを嫁。
0256デフォルトの名無しさんNGNG
>>255
つまり、すごく複雑ならドメインモデルでちょっと複雑ならトランザクションスクリプトっていってるのを、すごく複雑でもトランザクションスクリプトでってこと?
0257デフォルトの名無しさんNGNG
お父さんは貧血症
0258デフォルトの名無しさんNGNG
>>256
この辺かな。
http://d.hatena.ne.jp/higayasuo/20041223#1103771319
1週間くらい前からいろいろもとねたがある。
0259デフォルトの名無しさんNGNG
ドメインモデルを作っても貧血になっちゃうからよくない、と。
0260デフォルトの名無しさんNGNG
> 1.あるコンポーネントは自分で処理するか、自分よりも詳細なことを知っている別のコンポーネントに処理を任せる。
> 2.1を再帰的に繰り返す。

構造化じゃん。
0261デフォルトの名無しさんNGNG
>>260
メソッド分割なのかコンポーネント分割なのかという話だと思うよ。
ちなみにそれが構造化ならあらゆる処理がが構造化。
自分で処理するか他人に任せるしかないんだから。
0262デフォルトの名無しさんNGNG
ドメインモデルを適切に構築するのは難しいから、いっそのことトランザクションスクリプトでってこと?
でも、トランザクションスクリプトじゃない、って書いてある。

ここに書いてあるのは、トランザクションスクリプトを構造化したらいいって話だよね?
そしたら、コマンドパターンっぽく切り替えやすくなると。
構造化って、おおざっぱなものが細かいものを再帰的に内包するモデルのことだよね?
違うの?
0263デフォルトの名無しさんNGNG
デマルコの「構造化分析とシステム仕様」に、なんだかそのものズバリの図が書いてあるんだけど・・・。
で、Javaだと、ひとつの処理をひとつのオブジェクトに割り当てるといろいろ切り替えれて便利、っていう話だと思ったんだけど。
0264デフォルトの名無しさんNGNG
Javaの場合は関数ポインタもないし、言語仕様としてはメソッドはオブジェクトではないからクラスに追加したり切り替えたりできない。
ってことで、オブジェクトに持って切り替えれるようにしましょうってことでしょ?
切り替える用途やら規模によって、ストラテジーだとかコマンドとかステートとか、いろいろパターン名が変わるだけで。
0265デフォルトの名無しさんNGNG
>>262
たぶん、構造化というよりは、自分の役割だけをこなしてあとは、
人に任せるということなんだと思う。
ドメインモデルは、1つのクラスに役割が集中しすぎる危険性があるという話。
0266デフォルトの名無しさんNGNG
>>265
言い方が違うだけで、構造化とやってることは同じだと思うけど。
人=オブジェクトって考えが出てるけど、これはJavaの言語仕様上オブジェクトが便利なだけで。
関数ポインタが使えるか、メソッドを代入できる言語では、オブジェクトである必要はなさそうだし。
そのオブジェクトはステートレスなんだよね?

つまりは、ドメインモデルを適切に構築するのは難しいから、構造化されたトランザクションスクリプトで、ってことでしょ?
0267デフォルトの名無しさんNGNG
で、手続き呼び出しの構造化ツリーの構築にDIが便利と、そういうことでしょ?

ただ、ここでインターフェイスを持ち出してくる必要があるのかないのか。
インターフェイスはテストの都合で必要なわけで。
処理を動的に切り替える予定がない部分をインターフェイスにする理由は、それしかないよね?
0268デフォルトの名無しさんNGNG
あ、AOPもか。
0269デフォルトの名無しさんNGNG
なんかトランザクションスクリプトってことになんとか持っていきたいように思えるが、
「モデル」部分を「単純なデータ保持/DBアクセスオブジェクト」として完全委譲した
だけで、これはドメインオブジェクトだって理解した方がいいんじゃないの?

トランザクションスクリプトってのは、サービス層でDBアクセスも全部世話して、呼び出した
メソッド一つで全部やってしまうようなもんだろ。

プレゼンテーション層 -> サービス層(薄い) -> ドメインモデル(モデルを基準に分割/ORマッピングもする) ->DB
が
プレゼンテーション層 -> サービス層(薄い) -> ドメインオブジェクト(サービスを基準に分割) -> 薄いモデル(ほぼORマッピングだけする) -> DB

になっただけなんじゃないの? どっちみちサービスの連鎖の開始ポイントとして、Facade的な
薄いサービス層は現れてしまうし。
で、薄いモデル部分がドメインモデルと比べて明らかな貧血症だから騒いでるだけだろ。
俺にはデータアクセスをドメインモデルから外に出して、分割の基準を変えたように見える。
0270デフォルトの名無しさんNGNG
トランザクションスクリプトじゃなんで嫌なのかがよくわからんけど、先のblogだけ見ると構造化されたトランザクションスクリプトにしか見えないんだよね。
結局サービス層のことをドメインと呼んで、その前に置いたコントローラー的な層をサービス層と呼んでるんじゃない?
で、実際にドメインになる部分が薄くなって、「ドメインモデル貧血症」になってるからどうこう言ってるんじゃないの?

いや、よくわからんのだけど。
0271デフォルトの名無しさんNGNG
分割の基準を変えたように見えるという点では同じかな?
0272デフォルトの名無しさんNGNG
>>267,268
学生ですか?
機能拡張とか仕様変更とか、手作業でトランザクション制御する手間とか
納期とか考えたことある?
0273デフォルトの名無しさんNGNG
> トランザクションスクリプトってのは、サービス層でDBアクセスも全部世話して、呼び出した
> メソッド一つで全部やってしまうようなもんだろ。

いや、ドメインモデルを構築する代わりに全部1つの流れでやりましょうっていう形。
だから、ドメインモデルと置き換わるはず。
で、もちろん1つのメソッド・ひとつのオブジェクトで完結する必要はないと思う。
サービス層は、適切なトランザクションスクリプトを呼び出す層ということになるんじゃない?
0274デフォルトの名無しさんNGNG
>>272
> 手作業でトランザクション制御する手間

トランザクションが必要で、それがAOPで実現されてるならインターフェイスを使うしかないね。
で、機能拡張とか仕様変更とかの話だと、ソース追う手間が増えることを考えると、一概に言えるのかなぁ。
ソース追う手間は、無視してしまえる程度にしか増えないものなの?
0275デフォルトの名無しさんNGNG
機能拡張とか仕様変更とかで、インターフェイスが便利なときは、そのときインターフェイス作るっていうのは?
いままでのクラスと同じ名前でインターフェイス作れば、ソースは変更しなくていいし、オブジェクトの生成はDIでやってるわけだからそこ書き換えるだけじゃないかなぁと。
0276デフォルトの名無しさんNGNG
ttp://www.nri-aitd.com/tips/g-patern.html
これなんか読んでると、別にトランザクション・スクリプトでもいいじゃん、という気になる。

おれ、ドメインモデルってモデル間が密結合しすぎのような気がするんだけど。
0277デフォルトの名無しさんNGNG
その記事に書いてある通り、どっちがいいかはビジネスロジックの複雑さに依るのだろう。
0278254NGNG
>>255
結論は同じところに落ち着きますた。
0279デフォルトの名無しさんNGNG
>>278
複雑な業務ロジックだと、トランザクションスクリプトには
向かないというのはなぜ?
別にトランザクションスクリプトはどうでもいいんだけど、
コンポーネント分割でDIで組み立てるやり方なら、
逆に複雑な業務ロジックに向いてると思うけど、
理由は、それぞれのコンポーネントは小さいから。
ドメインモデルは、複雑なロジックになればなるほど、
クラスは大きくなる。
0280デフォルトの名無しさんNGNG
>>279
複雑な業務ロジックをやる予定は、今しばらくないので、「ファウラータンが言ってるから」で済ませてるんだけど、だめ?
なにか説明するにしても、ファウラーの言葉の引用になりそう。

とりあえず、ドメインモデルとトランザクションスクリプトの違いは、オブジェクトが状態を持つか持たないかだと思うけど。
で、複雑な業務ロジックの場合は、オブジェクトが状態を持ったほうが好都合なんじゃないのかなぁ。
0281デフォルトの名無しさんNGNG
ドメインモデルで複雑なロジックになればクラスが大きくなるというのなら、そのときトランザクションスクリプトならそれぞれのコンポーネントを小さく保てるのはなぜ?
0282デフォルトの名無しさんNGNG
>>281
複雑なロジックを単純な役割に分割してそれぞれの役割にコンポーネントを
割り振るからだろう。
それぞれの役割は単機能だから小さい。
ドメインモデルだとデータに対して振る舞いを割り当てるから、
複雑になればなるほど、やらなければならない役割が増える。
0283デフォルトの名無しさんNGNG
>>280
> >>279
> 複雑な業務ロジックをやる予定は、今しばらくないので、「ファウラータンが言ってるから」で済ませてるんだけど、だめ?
> なにか説明するにしても、ファウラーの言葉の引用になりそう。

引用は別に良いと思うけど、理由を説明できなければ意味はない。
ファウラーたんも盲目的に信じて欲しいとは思ってないと思うけど。

> とりあえず、ドメインモデルとトランザクションスクリプトの違いは、オブジェクトが状態を持つか持たないかだと思うけど。

そんなことどっかに書いてある?
0284デフォルトの名無しさんNGNG
トランザクションスクリプトだと単純な役割に分割できるときに、ドメインモデルだと単純な役割に分割できないことになるのはなぜ?
0285デフォルトの名無しさんNGNG
>>283
> そんなことどっかに書いてある?

そうじゃないの?
0286デフォルトの名無しさんNGNG
>>284
>>282に書いてあるじゃん。分割単位が役割じゃなくてモデルだからだろ。
0287デフォルトの名無しさんNGNG
そのモデルが適切に分割できないということになるのはなぜ?
0288デフォルトの名無しさんNGNG
さあ? DBのテーブル構造に依存しちゃったんじゃないか? モデルって永続化のやるしねえ。
0289デフォルトの名無しさんNGNG
逆に、モデルを適切に分割することができないとして、そのときトランザクションスクリプトを細切れに分割したところで、おおきなドメインのモデルよりも有効だと言えるの?
トランザクションスクリプトはいくらでも分割できるだろうけど、そのとき大きなドメインのモデルよりいいかどうかは疑問に思える。
杞憂なのかな?
0290デフォルトの名無しさんNGNG
>>288
ORマッピングで、1つのテーブルをいくつかのオブジェクトにマッピングできるものもあるわけだし。
0291デフォルトの名無しさんNGNG
>>289のいいたいことがよくわからんのだが、ドメインモデルに比べればそんな利点は霞むと
いいたいのか、大して変わんないんだからドメインモデルでいいじゃんといいたいのか、
言ってることに利点など何もない、問題は存在しないといいたいのか。
0292デフォルトの名無しさんNGNG
スレ違いだけど、ちょっと気になったんで、確認させてください。
デマルコの「構造化分析とシステム仕様」は、「構造化」の原典のひとつだと思って引っ張ってきたんだけど、違ってる?
0293デフォルトの名無しさんNGNG
>>289
分割統治せよは、昔から言われている真実。
大きいより小さいほうが中身がわかりやすいのは当たり前。
複雑なドメインロジックの場合、データと役割は単位(大きさ)が
かみ合わないことのほうが多いので適切に分割できない。
たいていの場合、1つのデータに多くの役割が集中する。
なぜかっていうとそのデータに関する役割を集めるからね。
必然的にそうなる。
0294デフォルトの名無しさんNGNG
>>291
ドメインモデルが分割できないときに、細切れのトランザクションスクリプトをばらまいても、問題を複雑にするだけということはないだろうか?と。
0295デフォルトの名無しさんNGNG
ちょっと前にも出てたけど、ドメインモデルってモデルを基準に機能をどこにおくか
考えるからさ、「この機能、どこにおいてもぴったりしない」とかいうことがあるよねえ。
で「社員Util」とか変なのがいつのまにか作られてたり。

俺はサービスを分割基準に置くのは悪い考えではないと思うし、それによってオブジェクト指向的な
利点を無効にしてしまうこともないと思うよ。
モデルの役割をモデル内データの管理とその永続化だけにしようって考え方も、とてもオブジェクト
指向的だとおもうけど。
0296デフォルトの名無しさんNGNG
>>294
んん? 単にモデルにはモデルの役割だけさせて、ビジネスロジックはモデルの役割じゃないから
サービスとして分割しようって言ってるだけだと思うんだけど。

サービスとして分割してしまえば、分割の自由度は上がる。でも意味もなく細切れにしたら混乱する
のはあたりまえ。「ここは分割しなきゃ」と思ったときに、ドメインモデルだと分割しにくいけども、
サービスだけならきれいに分割できることがあるってだけ。
0297デフォルトの名無しさんNGNG
>>292
間違ってないよ。
なんか構造化は悪いものだとか、オブジェクト指向とはかみ合わないとか
勘違いしているやつが多いのか。
0298デフォルトの名無しさんNGNG
ようするに、ttp://www.nri-aitd.com/tips/g-patern.htmlのグラフだと、トランザクションスクリプトは問題が複雑になったときに加速度的に設計コストがあがってるけど、そうではない、っていうことなんだよね?
実際、ここにはドメインモデルがいいとは書いてあるけど、トランザクションスクリプトがダメな理由は書いてないね。

だから、どっちも疑問といえば疑問なんだけど。
ただ、モデル化は視点の問題だと思ってるので、片方のモデルで適切に分割できないのに片方のモデルでは適切に分割できる、というのが、にわかに信じれない。
複雑なものを細切れにすると、単純なものが複雑に散らばるだけなんじゃないかと。
それよりは、大きな複雑なものがあったほうが、見通しも良くていいんじゃないかと思うわけです。
そのとき、それぞれの部品の単純さを主張しても、意味のある主張になるのかなぁと。

実際に上記のサイトのグラフで線が入れ替わるところのような複雑なものは、単純に例示できないだろうから、難しい話だとは思うんだけど。
0299デフォルトの名無しさんNGNG
>>297
そう。
だから、なんでヒガさんが構造化だと言われたことを誤解だと斬って捨ててるのか、疑問。
0300デフォルトの名無しさんNGNG
>298
適切って言葉をどう捉えるか。くーす的なのは「いかに維持しやすいか」が視点だろう。
そのかわりドメインモデルの明快な美しさは失われるが、それはビジネスだから諦める。

理屈ではドメインモデルってみんな好きなんだよ。でも仕事で使ってみると
世の中明快に割り切れるものなんてないし、たとえうまく設計できたとしても
システムは完成した瞬間から陳腐化するから維持運営に結構苦労する。

サービス分割って考えは希望が持てる。業務とコードが対応してるから直すときに躊躇がいらない。
将来一部業務に大変更が発生しても、ほかへの影響なしにそこだけ手を入れられるってのはステキだ。
0301デフォルトの名無しさんNGNG
おれは、そのモデルの機能が_本当に_多くて複雑なモデルになるなら、
それはそれでかまわないと思ってる。でも実際には、そのモデルAの役割というよりは、モデルA
とBとCをつかってほにゃららする、という機能が結構あるんだよ。
結果としてAがB、Cを保持したりして実現するわけだ。

それがAというモデルの機能なのか?という疑問というのが1点ある。B、Cでないとどうして
いえるのか? またAでもBでもCでもなく、ABCと取りまとめる別のモデルの機能ではないか?

さらに、その機能のためにAはB、Cを保持してるわけで、結局は「複雑に散らばってる」わけだ。

大きな複雑なモデルってのは、「大きなものがひとつあって、そこだけ見ればなんとかなる」んじゃ
なくて、細切れのモデルが一つのモデルの中で絡み合ってごちゃごちゃになってて、結局全部の
モデルを理解していないと「大きな複雑なモデル」を理解できない。だから「ドメインモデルは全体を
理解してないと使えない」と言われるわけ。さらにモデルが永続化も担うので、役割過剰と言われ
ても仕方がないと思う。

サービス分割も同じ問題ははらんでるよ(あるサービスが別のサービスと絡み合うとかね)。
ただサービスが一つのビジネスロジック上の役割で分割されているので、触るときに影響範囲が
見えやすいし、「あ、これは別の業務だな」と思ったら躊躇なく分割できる。結果として細切れの
サービスができかねないのは事実なんだけど、細切れのものが業務単位でまとまってるので、
多少はまし、といったところか。
0302デフォルトの名無しさんNGNG
誰にツケ回したところで、結局は自分で払うんだべ。
0303デフォルトの名無しさんNGNG
>>300
とりあえず前提条件おさらい。
どうやって計ったかはしらないけど、トランザクションスクリプトだと天井つきぬけるくらいコストがかかるとファウラーが主張するくらいビジネスロジックが複雑なときの話。
で大きいまま分割できないドメインのモデルがある。

そのとき、そのドメインのモデルは、その大きさのままが維持しやすいことになるんじゃないのかなぁ。
将来そのモデルのかかわる一部業務に大変更が発生しても、いろいろなところを追わずに、そのモデルだけ修正すれば済むわけで。
もちろん、分割できないモデルだから、そのモデル全般に影響が及んでるだろうけど。

縁がありそうな程度の複雑さのビジネスロジックでは、>>300に賛成。
0304デフォルトの名無しさんNGNG
>>303
うーん、なんか逆な気がするな。
大きく複雑なモデルは仕事をいろんなモデルに移譲しまくってるので、「業務」単位でみると、
一つの業務追加・変更で複数のモデルに影響がでるよ。
モデルの分割単位はあくまで「なんらかのビジネス上の概念」であって、業務ではないからね。

で、たいていの業務では、「なんらかのビジネス上の概念」が複数絡まってるもんだ。この複数
絡まってる機能をどこにおく?という話じゃないか。
0305デフォルトの名無しさんNGNG
>>301
いや、そのとき、ドメインモデルだと細切れのモデルが絡み合っててごちゃごちゃになってて結局全部のモデルを理解してないくらい複雑なのに、サービス分割だと影響範囲が見えやすく業務単位でまとまってるってことはないんじゃないのかな、と。
サービスを、躊躇なく分割したり業務単位でまとめれるなら、ドメインモデルも同じように分割して業務単位でまとめれる可能性が高いんじゃなかろうか。
0306デフォルトの名無しさんNGNG
ドメインモデルのときは複雑な業務ロジックの話をしてるのに、サービス分割のときはそこまで複雑じゃない業務ロジックの話をしてるように見える。

もちろん、複雑じゃない業務ロジックの話で、ドメインモデルよりサービスでの分割がいいというのは、同意できる。
0307デフォルトの名無しさんNGNG
>>305
そうだね。でもそのようにドメインモデルを分割したら、それはドメインモデルじゃないんじゃない?

ドメインモデルはそのモノが担うべきものだけを提供すべきで、業務的な必要性から関係ない機能を
追加するもんじゃないからさ。理想としては、もし業務要件が複数のモデルが絡み合うものなら、
複数のモデルを直すべきなんだよね。

業務要件で勝手にまとめてどっかのモデルに押し込んじゃったりしたら、ドメインモデル特有のオブジェ
クト指向的美しさは台無しじゃないか? でもビジネスはそんな美しさは関係ない訳で、そこに軋轢があ
るんじゃないか。
サービスだと、そもそも業務単位でまとめるもんなんだし、分割しやすいしまとめやすいってことじゃ
ないかと。まあ業務要件があって仕事があるという現実に即した分割方法じゃないかな?
0308デフォルトの名無しさんNGNG
http://www.nri-aitd.com/tips/image/g-patern_4.gifなんだがな、
まずどういうシステムを対象にどのように測定したのか知りたい。
同じシステムをそれぞれのパタンで作って比較したのか、
それとも色んなシステムを比較したのか。どこかにどのように
調査したのか書いてるのある?
0309デフォルトの名無しさんNGNG
>>307
その意見が、非常に複雑な業務ロジックで成り立つのかが疑問なんです。

まあ、その解を得ることに、「>>308の図が読み解ける」という以上の意味はないんだけど。
というか、ファウラーが>>308の図のそれぞれの軸をどう計ったかが一番疑問だな。
もちろん長い年月ソフトウェアに関わって、いろいろな開発をみてきて、実際の測定もしてきたわけだから、それなりの根拠があることは間違いないんだけど。
■ このスレッドは過去ログ倉庫に格納されています