国産DIコンテナSeasarとくーす その3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGってどうよ?みんなもう使ってるの?
使用経験とか、実戦配備情報とか、つかえねーよボケ、とかいろいろ書いてね。
あと、開発プロセス「くーす」の話題もこちらでどうぞ。
本家 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/
0163デフォルトの名無しさん
NGNG>
> http://d.hatena.ne.jp/makotan/20041219#p4
>
> で、うまくまとめられてると思いますが、できる限りスコープ(役割)を小さく抑えることで、
> 修正が入ったときの影響範囲が小さくなり、保守性が増します。
リンク先を読みましたが、データと振る舞いを分けるメリットが
よく分かりません。
データと振る舞いを分けるとなぜ修正の影響範囲が小さくなるのでしょうか?
また、私には逆にデメリットばかりが思いつきます。
-データ構造を公開することにより、疎結合性を妨害
-ポリモーフィックな振る舞いを持てない
-いくつかのデザインパターンの適用を妨げる(Compositeパターン等)
> それを考えるには色々な情報が必要になって一概に言えないので
> 簡略化する為に常にデータと処理を分離することにする。
簡略化するために常に分離しないことにしても良いのでは?
016444
NGNG> うれしかったです。これからも、よろしくお願いします。
そんなご丁寧にw
こちらこそよろしくお願いします。
0165デフォルトの名無しさん
NGNG0166デフォルトの名無しさん
NGNGこれ実際のプロジェクトでやられたら激しくやだ
calculatePayはどう考えても社員クラスにもたすべきじゃない。
44は実務でこんな設計してんの?それとも実務を知らない学生さんなのか?
0167デフォルトの名無しさん
NGNG月給=体重/(身長*身長) 万円 とか。
016844
NGNG> >>147
> これ実際のプロジェクトでやられたら激しくやだ
> calculatePayはどう考えても社員クラスにもたすべきじゃない。
> 44は実務でこんな設計してんの?それとも実務を知らない学生さんなのか?
アジャイルソフトウェア開発の奥義の125Pから持ってきた例なので、
文句があるならロバート・C・マーティンへどうぞw
冗談はさておき、calculatePayを社員へ持たすべきじゃない理由を教えてほしいんだけど。
0169デフォルトの名無しさん
NGNG0170デフォルトの名無しさん
NGNGSQL文のログと、「トランザクションを〜」のログレベルが同じなのはどうかと思う。
SQL文って障害解析時に使うけど、「トランザクションを〜」が同じレベルで存在してると、ウザイ。
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNG>アジャイルソフトウェア開発の奥義の125Pから持ってきた例なので、
>文句があるならロバート・C・マーティンへどうぞw
書いたのが誰であれ、自分が引用したんだから、自分で責任もって答えたらどうなの?
やっぱり学生さんなのか?
>冗談はさておき、calculatePayを社員へ持たすべきじゃない理由を教えてほしいんだけど。
1.社員の情報だけじゃ給与計算なんて出来ん
勤怠情報とか、税金とか、手当てとか、あと成果主義の会社だったら
会社の業績とかが給与計算に必要なわけで、calculatePayを社員にもたすと
社員とその他もろもろのあいだに依存関係が出来る。
2.calculatePayを社員にもたすと給与計算の変更があるたびに社員クラスを変更しなければならない
そのときに社員クラスにバグを作りこまないという保証がない。
3.calculatePayは月給を計算するんだとして、ボーナスはどうするのか、出張旅費清算はどうするのか?
社員クラスにcalculateボーナスメソッドを持たすとして、会社の制度が変更になってボーナスがなくなったらどうすんの?
0173デフォルトの名無しさん
NGNGやっぱり給与計算となると、
皆自分の経験したり勉強した
実務の事考えちゃうんだと思う。
そうなるとはぶ氏のいってるような事を
考えちゃって、違和感を感じる、と。
>160で、この例ではそこまで想定してないから
YAGNIだって書いてあるけども
簡略すぎて逆にイメージ湧かないんだと思います。
0174173
NGNG>172
そんな訳で、このお題に関しては、そこまではYAGNIらしいんだ。
0175デフォルトの名無しさん
NGNG図形クラスがあったとして、saveメソッドを図形クラスに持たせるべきかどうか?
複数の保存形式をサポートしたい場合、saveメソッドを図形クラスに持たせた場合と
別のクラスに持たせる場合で修正の影響範囲ばどちらが小さいか?
、saveメソッドを別のクラスに持たせる場合
-データ構造を公開することにより、疎結合性を妨害
-ポリモーフィックな振る舞いを持てない
-いくつかのデザインパターンの適用を妨げる(Compositeパターン等)
というデメリットが実際に起こるかどうか?
44はくーすがどうたらいう前に、オブジェクト指向を勉強しなおした方がいいと思う。
0176173
NGNG何度もすんません。せっかくだから自分でも考えてみた。
1はなるほど。
2は、社員クラスだろうと給与計算だろうと、変更のリスクは同じかなーと。
どちらかというと、そのリスクを回避するために、
テストがよりしやすいのはどっちかな?って話に持ってった方が吉だと思う。
3は、給与計算に出張旅費生産を組み込むのはちょっと仕事させすぎだと思う。
俺だったら経費の支払と給与計算は別にする。
仕訳も作ったりする場合、まったく別だしね。
最終的に銀行に振り込む情報を管理する機能(例えばFBデータを管理するクラスとか)や
給与明細を出力する機能はこれまた別じゃないか、と。
3はちょっと揚げ足気味かな、ごめん。でも気になったので。
ボーナスは、うーん、どうしよう。
0177デフォルトの名無しさん
NGNG171は、障害出たとき、スタックトレースだけを頼りにしてるのか?
SQLExceptionだったら、どうするんだ?SQL文なくても分かるのと、分からないのあるだろ。
0178デフォルトの名無しさん
NGNG> 簡略化する為に常にデータと処理を分離することにする。
MMRのキバヤシの口調に似てる。
0179デフォルトの名無しさん
NGNG思うが、Strutsを使った時のDTO <--> ActionForm変換の手間をなんとかできんものか....
0180デフォルトの名無しさん
NGNG思ったんだけどどうだろうか。「あーここでロールバックしてるわ」とかそういう
情報になるしさ。
0181デフォルトの名無しさん
NGNGorg.seasar.extension.jtaだけINFOにするとかで止めれるんじゃない?
0182デフォルトの名無しさん
NGNG0183デフォルトの名無しさん
NGNG018444
NGNG1と3のような要件の時にはcalculatePay持たすべきじゃないかもしれないけど、
「社員の給与は社員の役職によってのみ決まる」という場合には社員に持たせてもいいと思うんだけど、どう?
また、2の考えを押し進めると以下の(A)を(B)のようにするべきという話になると思うんだけど、こんなクラス、ちょっとありえないよね。
なので2の考え方は間違ってると考えます。
=== A ===
class Stack
def push( o )
...
def pop
...
end
=== B ===
class StackData
...
end
class StackPush
def push( stack_data, o )
...
end
class StackPop
def pop( stack_data )
...
end
018544
NGNGごめん、質問の意図がわからないよ。
0186デフォルトの名無しさん
NGNGcalculatePayとisExpiredは無関係。
そんな例示でいったい誰を説得しようというのか。
0187デフォルトの名無しさん
NGNG> 役職によってのみ決まる
役職によって決まるんなら、役職に持たせれ。
0189デフォルトの名無しさん
NGNG給料の計算はPaymentCalculatorクラスにまとめるでどうよ。
019044
NGNG> stackのpushとpopは対(つい)の操作。
> calculatePayとisExpiredは無関係。
> そんな例示でいったい誰を説得しようというのか。
対の操作 = ひとつのロール、だよね。
172は、例えひとつのロールとして表すべきクラスでも、
エンバグの危険を避けるためにデータと処理を分けるべき、と言っていると思ってるんだけど。
もしそうじゃなかったとしたら、172の2の反論自体無効だね。
だって、おれは複数のロールを持つクラスをロールごとに分割することには賛成なんだもん。
0191デフォルトの名無しさん
NGNG> 役職はクラスじゃないだろう。
なぜ?
役職によって違うなら、役職ごとに違う処理を役職ごとに実装するのはありだと思うが。
0192デフォルトの名無しさん
NGNG>だって、おれは複数のロールを持つクラスをロールごとに分割することには賛成なんだもん。
calculatePayとisExpiredはひとつのロール?
おれはどう考えても別々のロールだと思うんだけど。
019344
NGNG> calculatePayとisExpiredはひとつのロール?
> おれはどう考えても別々のロールだと思うんだけど。
コンテキストによる。
0194デフォルトの名無しさん
NGNGいいと思う。
あくまでモデルの話だけどさ。
0195デフォルトの名無しさん
NGNGじゃそんな例出すなよ。コンテキストによるなんていわれたら議論のしようがない。
おれはcalculatePayとisExpiredがひとつのロールになるコンテキストなんて現実にはほとんどありえないと思うが。
0196デフォルトの名無しさん
NGNG>>147で
>この場合のオブジェクトZは単一責任の原則をやぶってると思う?
>おれは思わないよ。
ていってるのはなんなんだ?これを見たら普通44はcalculatePayとisExpiredがひとつのロール
だと考えてると思うんじゃない?
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGなんでも適当に言えばいいってもんじゃないぞ
0199デフォルトの名無しさん
NGNGいや、そんなに悪くないんじゃない?
俺の場合、役職に関する処理が増えた場合はそれを採用するかも。
0200197
NGNGある役職の処理が変わっても、社員や他の役職のソース修正しなくて済む。
けっこう良かったですよ。
0201デフォルトの名無しさん
NGNG役職や職責でstateパターンってまだ試した事無いんだけど
どうも永続化が、って逆か、DBから読み込んで
Entityを生成する時が面倒な気が、ぼんやりとするんです。
どうでした?俺が判ってないだけかなー。
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNG197の提案は、同じ設計パターンが使えませんかねって話なので
202は反論になってないです。
ファウラーに、在庫推移は複式簿記で管理しないだろ、大丈夫かお前?
といってるようなもんじゃないでしょうか。
もうちょっとダメな理由を詳しくよろしく。
0204デフォルトの名無しさん
NGNGデザインパターンはマニュアル思考しかできない人間を生産してしまう
などというトンチキな批判がうまれる原因w
0205デフォルトの名無しさん
NGNG処理中心になってしまうかもしれないけど、考え方としてはStrategyパターンで行ったほうが素直なのではないでしょうか?
やっぱり、役職は状態ではないと思う。
話が戻ってしまうかもしれないが・・
0206デフォルトの名無しさん
NGNGHibernateにおまかせ。
0207デフォルトの名無しさん
NGNG役職はロール(というオブジェクト)の一種。
組織の規程は、ロールに対して責務を割り当てる。けして個人や部署じゃない。これはビジネスルール。
個人や部署はパーティとしてまとめられる。
パーティはN個のロールを持てる。
組織の規程は、パーティへのロールの割り当て方について制約を課す。これもビジネスルール。
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNG手続き型マンセー、Transaction Script上等って結論じゃなかったか?
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNG給料計算は、給料計算担当者が。
0214デフォルトの名無しさん
NGNGAチーム、なつかしーなおい。
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNG社員は
-自分の役職
-役職からの給与算出方法
のみを知っていれば「権限」などなくても給与計算できます。
よって給与計算担当者は必要ありません。
もちろん、コンテキストによっては給与計算担当者が必要になることがあるかもしれないことは否定しませんが。
0217デフォルトの名無しさん
NGNGで、社員ひとりひとりに自分で給与計算させる会社があるの?
モデリングとは話が違うかもしれんけど、社員を渡せば給料が返ってくる、給与計算者がいるほうがいいと思うなぁ。
0218デフォルトの名無しさん
NGNGこの前提がそもそも非現実的で意味無し。
0219デフォルトの名無しさん
NGNGサンプルコードに何を求めてるんだろう?
0220デフォルトの名無しさん
NGNGあした使えるコード。
あさって納品できるコード。
0221デフォルトの名無しさん
NGNG「社員が持つべきケースのサンプル」
と、「計算担当者が持つべきケースのサンプル」があるだけ。
0222デフォルトの名無しさん
NGNG0223デフォルトの名無しさん
NGNGそいつのせいでスレ違いな書き込みばかりになってるじゃないか!
0224デフォルトの名無しさん
NGNGログ見ても、ナイーブがどうこうとか、某blogのアイドル写真がそろそろ邪魔くさいとか、あまりスレタイとは関係ないし。
0225デフォルトの名無しさん
NGNGどうやらファウラーらしい
0226デフォルトの名無しさん
NGNG> 正解がないだけに色々と人によってまちまちになっちゃうから
> いっその事統一ルールで、データの振る舞いは
> 全部分けちゃえって話だと読みましたがどうでしょう。
に賛成。
債務とか責任とかを考えて適切な場所に処理を記述とか考えていくと、いろいろなところにコードが分散してしまって、追えなくなってしまう。
DBのViewとかトリガーとかまで考えて適切な場所に処理を記述していくと、もう、どうしようもなくなる。
0227デフォルトの名無しさん
NGNG維持すべき設計文書を書いてないだけじゃないかな。
0228デフォルトの名無しさん
NGNGしかも、設計文書とJavaソースとViewやトリガは、見るためのツールが違うので、煩雑に。
それだけ追うための手間が増えるわけですよ。
修正の場合も、設計文書を必ず修正する必要があって、この作業は徹底するのにかなりの労力を伴う。
単純に比較すれば、一ヶ所で記述した場合にくらべて、労力自体は増えると思うのですよ。
とくに、設計文書管理の労力。
0229デフォルトの名無しさん
NGNG実際には、問題になるのは、レベルではなくて、考え方で。
むしろレベルが高い、考え方の違う人が書いたシステムが非常に追いにくくなるわけで。
システムを追う前に、どのような考え方で書かれたのかをプロファイリングしないといけない。
0230デフォルトの名無しさん
NGNGアプリケーション独自のロジックに関しては、ドキュメントがなくてもわかるようなものが理想で。
ただし、アプリケーションの骨格がドキュメントに依存するのは仕方がないと思う。
でも、アプリケーションの骨格は、揺るぎにくく共通化しやすいから、その部分をみんなで使えるようにしましょう、と。
で、そのアプリケーションの骨格のドキュメントが、くーすなのかなぁと思う。
0231デフォルトの名無しさん
NGNG0232デフォルトの名無しさん
NGNG> に賛成。
> 債務とか責任とかを考えて適切な場所に処理を記述とか考えていくと、いろいろなところにコードが分散してしまって、追えなくなってしまう。
> DBのViewとかトリガーとかまで考えて適切な場所に処理を記述していくと、もう、どうしようもなくなる。
債務(さいむ)じゃなくて責務(せきむ)な。
0233デフォルトの名無しさん
NGNG恥ずかしげも無くよく言えるな、おい。
XPerもどきの増殖にも困ったもんだ。
0234デフォルトの名無しさん
NGNG数度の変更を経たにもかかわらず、ちゃんと同期しているドキュメントをみたことがない。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNGうらやましいな。
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNG先ず書く、そして打つという手順を守りさえすればそんなはずはない
と上司は言うけれど・・・・・・・・
短期で動くモノを差し出せとせっつかれて、それどころじゃないのです。
アジャイルって本当に素晴らしいモノなのかな?なんか週間連載を
抱えた漫画家みたいって言うか、納期が短い間隔で何回もやってく
る感じで、昔よりも寧ろ過酷になってる様な気がするんですが・・・・・
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG変更管理をきっちりすれば同期問題はおきないぞ。
0241デフォルトの名無しさん
NGNGだから、変更管理をきっちりしてる
プロジェクトで仕事した事がない、って話なんです。
ちっこい案件は別だけど。
0242デフォルトの名無しさん
NGNGPMがマヌケということか。同情するよ。
まぁ、悲観するな。そのうちまともなPRJに出会えるから。
0243デフォルトの名無しさん
NGNG構成管理をきっちりしないと、同期問題がおきるってことでしょ。
で、構成管理をきっちりすることは、組織的な成熟度が高くないといけない。
適用しやすい開発方法論を考えるのなら、
「こうやればうまく開発できます。でもドキュメントが大切なので、構成管理はきっちりやってください」
というものはどうかと思う。
構成管理がきっちりできるなら、他の能力も高いことが多いから、どうとでもやってくれという感じ。
0244デフォルトの名無しさん
NGNG. |(・∀・)|
. | ̄ ̄ ̄ ジサクジエン王国
△
△l |
__△|_.田 |△_____
|__|__門_|__|_____|_____
0245デフォルトの名無しさん
NGNGTheBlobを避けるためにPoltergeistに向かっているように思うなー。
The Blob
http://www.antipatterns.com/briefing/sld024.htm
Poltergeist
http://www.antipatterns.com/briefing/sld030.htm
0246デフォルトの名無しさん
NGNGだからフレームワークは無用
プログラミングしよう
0247デフォルトの名無しさん
NGNGまぁ、わからないでもないよ。最近は知ったかぶりのアジャイル莫迦が多すぎるからな。
JAVAWORLDも酷い記事を書くやつが増えたが、編集は何をやっているんだか。
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG使い捨てで、ソースコードとの同期はやらないんだよね。
0250デフォルトの名無しさん
NGNG捨てはロバストネス図じゃなかったっけ?
0251デフォルトの名無しさん
NGNG捨てはロバストネス図じゃなかったっけ?
0252デフォルトの名無しさん
NGNGあれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
あれ?あれ?あれ?あれ?あれ?あれ?あれ?
0253243
NGNGもちろん適切に使えばよいけど、一度乱用する時期を経ないと適切に使えないと思う。
プロジェクトの発言権を持った人の中に乱用する時期の人がいる可能性も高い。
0254243
NGNG「ドメインモデルは、複雑なコードを整理しやすいのがメリットだ。
ただ、開発者にとって理解しにくく、またRDBMSとのマッピングが複雑になる。
そこで、ORマッピングレイヤを設けなくてはならない。
そのため、ドメインロジックがシンプルな場合は、トランザクションスクリプトを採用した方がいい。」
ということだ。やっぱファウラータンは俺のために言葉を用意してくれてて偉いな。
ttp://www.ric.co.jp/sol/contents/sol_0407/sol_architect.html
0255デフォルトの名無しさん
NGNGそんな考えはレガシーで、ドメインモデルは複雑な
ロジックを記述するには向かない
という考えってどうよというのが先週からの話。
少しは流れを嫁。
0256デフォルトの名無しさん
NGNGつまり、すごく複雑ならドメインモデルでちょっと複雑ならトランザクションスクリプトっていってるのを、すごく複雑でもトランザクションスクリプトでってこと?
0257デフォルトの名無しさん
NGNG0258デフォルトの名無しさん
NGNGこの辺かな。
http://d.hatena.ne.jp/higayasuo/20041223#1103771319
1週間くらい前からいろいろもとねたがある。
0259デフォルトの名無しさん
NGNG0260デフォルトの名無しさん
NGNG> 2.1を再帰的に繰り返す。
構造化じゃん。
0261デフォルトの名無しさん
NGNGメソッド分割なのかコンポーネント分割なのかという話だと思うよ。
ちなみにそれが構造化ならあらゆる処理がが構造化。
自分で処理するか他人に任せるしかないんだから。
0262デフォルトの名無しさん
NGNGでも、トランザクションスクリプトじゃない、って書いてある。
ここに書いてあるのは、トランザクションスクリプトを構造化したらいいって話だよね?
そしたら、コマンドパターンっぽく切り替えやすくなると。
構造化って、おおざっぱなものが細かいものを再帰的に内包するモデルのことだよね?
違うの?
■ このスレッドは過去ログ倉庫に格納されています