ドメインモデル VS トランザクションスクリプト
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/05/03(日) 18:02:12ID:vXt2lE+8SQLがわんさか書かれた後に、DBの変更が頻繁に行われるので、生産性が著しく下がる。
PofEAAで解説されているドメインモデルでどうして実装しないんだろう?
俺が身近な人に聞いた理由:
1.難解なモデリングをするイメージがあるから(アナリシスパターンのせいか?)
2.どうすれば実現できるかわからないから(アーキテクチャが複雑になるから?)
3.業務アプリにドメインモデルは向かないから(イベントドリブンではないから?)
4.Hibernate(EJB3)が重厚すぎてトラブルが起きたときに怖いから(フレームワークのノウハウがないから?)
5.画面毎に実装させないと作れないから(開発者がへぼいから?)
俺はHibernateを使わずにDAO+リッチなORマッピング処理を自動生成する方法
(Ruby On RailsのActiveRecordみたいなかんじかな)で開発するのが好きで、
それを使ったプロジェクトでは実際に、生産性も保守性も高いと思うんだけど。。
どう思う?
00031
2009/05/03(日) 23:14:04ID:xmCW58Jrドメインモデルとは「エンタープライズアプリケーションアーキテクチャパターン」という本に出てくる
ドメイン(ビジネス)ロジックのアーキテクチャパターンです。
0004nobodyさん
2009/05/03(日) 23:34:01ID:???0006nobodyさん
2009/05/04(月) 14:43:09ID:???0007nobodyさん
2009/05/06(水) 02:11:47ID:???フルO/Rマッピングかそうでないかってことを言いたいの?
0008nobodyさん
2009/05/08(金) 03:34:16ID:igohCc31単純に世の中勉強しない馬鹿ばかりだからじゃない?
Eric EvansのDomain Drviven Designはもう読んだ?
>>7
全然違うよ。
0009nobodyさん
2009/05/09(土) 02:51:09ID:???ttp://www.ogis-ri.co.jp/otc/hiroba/index.html
00101
2009/05/09(土) 10:04:22ID:sQydQEGwフルO/Rマッピングが何を指すのかがちょっとわからなかったので、YES、NOといえないのですが、
RDBのロウを継承構造のオブジェクトにするだのといった、変換についての話はどうでもいいです。
ドメインモデルかトランザクションスクリプトか?という問いたいのは、
・ドメインモデルがわかるかわからないか
・ドメインモデルを使ってるか使ってないか
・ドメインモデルが好きか嫌いか
理由を含めて知ることで、トランザクションスクリプトとドメインモデルの理解が深まるのではないかなぁ。。と思いまして。
00111
2009/05/09(土) 11:29:10ID:sQydQEGwリーダーとかアーキテクトしてる人は少なくとも勉強してるんじゃないのかな?
DDDは流し読みしたよ。
2章までは楽しく読めたんだけど、それ以降はテストコードばっかり
書かれていて、実装の全体像が明示されていないから、わかりにくいと思った。しかも.Netだし。。
考えるネタにはなるけど、これを読んでドメインモデルのシステムを作るのは
無理じゃない?
僕はDAO+自前のOR変換+レイジーロードのアーキテクチャで作っておいて、
チューニングが必要な所をイーガーロードにしていくので、エバンスさんとは好みが違うから余計に
否定的に思ってしまうのかも。
00121
2009/05/09(土) 13:24:49ID:sQydQEGwごめん、DDDを思いっきり勘違いしてました。
「ドメイン駆動」がDDDの邦訳版だと思っていたんだけど、違うんですね。
ちょっと調べてきます。
00131
2009/05/09(土) 13:27:04ID:sQydQEGw「ドメイン駆動」にたいするものでした。すまん。。
00141
2009/05/09(土) 13:33:20ID:sQydQEGw早速明日読んでみます。
勘違いに気づかせてくれた8さん、ありがとうございました。
0015nobodyさん
2009/05/09(土) 21:21:04ID:aj41t47s0016nobodyさん
2009/05/17(日) 03:32:45ID:6eogczUNいえいえ。
DDDはまだ日本語に翻訳された版がないので、英語に弱いと割と読むの、大変かも。
PofEAAは日本語に翻訳もされてるよね。
00171
2009/05/19(火) 09:10:20ID:P726AmTE読んでます。が。。。使われている英語難しいですね〜(^^;
ひたすらわからない単語の意味を本に書きこんでいますが、
文章にしたときに意味がわからない事が多々あります。
でも、とにかく読まないとドメインモデルを語れなさそうなので、
地道に読んでいきますね。
00181
2009/05/19(火) 09:13:02ID:P726AmTEもしよろしければDDD読んだ感想をお聞かせいただけますでしょうか
0019nobodyさん
2009/05/19(火) 13:21:23ID:???0020nobodyさん
2009/05/20(水) 03:39:11ID:???それぞれどのような場面で有効なものなのかを書けや。
0021nobodyさん
2009/05/24(日) 08:59:41ID:fimh7Ald>ドメインモデルとトランザクションスクリプトについての説明と
>それぞれどのような場面で有効なものなのかを書けや。
簡単に言うとトランザクションスクリプトは手続き型だね。
手続き型なんて、今さらなんで議論してるかって、エンタープライズアプリがいつまで経っても手続き型から脱却ができないから。
ドメインモデルは。。。
まぁ皆さん勉強しましょう!
0022nobodyさん
2009/05/24(日) 14:57:33ID:jZn6bwgb取り敢えず一番理解しやすかった説明はこんなんだが、こういうことなのか?
ttp://csharper.blog57.fc2.com/blog-entry-170.html
要するにこれまでデータのまとまりでしかなかったEntityがLogicも包含すると。
そんな簡単な訳ねーよな。
0023nobodyさん
2009/05/24(日) 22:14:36ID:fimh7Aldドメインモデル貧血症の理解は入り口に過ぎず。
2chで理解しようってのは無理なんじゃ?
00241
2009/05/25(月) 21:34:23ID:OuLK7/Hk>EntityがLogicも包含すると。
アーキテクチャとしての違いの基本はそうです。つまりオブジェクト指向にするということです。
00251
2009/05/25(月) 21:36:26ID:OuLK7/Hk関連とは手続き型でいうと構造体に別の構造体の変数を持っている感じです。
手続き型であるトランザクションスクリプトでは、ServletやActionやServiceやLogicといった
処理専門のクラスがDaoを呼び出した結果を、この構造体にデータを詰め込みます。
当然ながら詰め込んでいない構造体のデータは参照しても値が取得できません。
例えば、Employee has Department has Companyという構造だとして、
処理専門のクラスがEmployeeとDepartmentしかデータを詰め込んでいない場合、
(Employeeのインスタンス)e.department.companyはnullになってしまいます。
00261
2009/05/25(月) 21:37:14ID:OuLK7/Hk関連するModelインスタンスにデータを詰め込む処理は、Modelクラスの中に実装します。
例えば関連する情報を参照された際にModelクラスのゲッター内でDaoを呼び出します。
これにより関連する情報を無限に辿ることができるネットワークが構築できます。
例で言うと、処理専門のクラスがEmployeeのインスタンスを取得した後、
(Employeeのインスタンス)e.getDepartment().getCompany()を実行するだけで結果が取得できます。
00271
2009/05/25(月) 21:57:59ID:OuLK7/Hkじゃあドメインモデルは何かというと、この無限に辿れる構造のModelクラスにビジネスロジックを実装したものです。
これで何が改善されるのかというと
・関連するデータを無限に辿れるため、画面の変更に強い。
・Modelクラス郡でカプセル化された中にビジネスロジックが記述できるため堅牢になる。
・Modelクラスを現実世界に近い状態で表現できる。
・画面毎にSQLを記述する量が減るため分業しやすい。
逆にデメリットとして
・アーキテクチャが複雑になる傾向がある。
・実際には完全なカプセル化は無理なので、ある程度開発ルールで縛る必要がある。
・単純に実装するとパフォーマンスが悪くなる。
・オブジェクト指向がわからない人にはModelクラスを全く設計も実装もできない。
21さんが言うように、現状、最後のデメリットが一番のネックで広まらないのかもね。。
0028nobodyさん
2009/05/25(月) 23:52:27ID:QpZDOw5B少し論点が特定のものに行き過ぎてる。
Martin FowlerのGetterEradicatorという記事をご覧あれ。
002922
2009/05/26(火) 00:38:57ID:???取り敢えずAmazonでDDD注文してみた。英検準二級の俺じゃ辛そうだがw
>>1
分かりやすい例ありがと。
「蜘蛛の巣のような関連」の実際的な意味としてはそういうことなのか。
ttp://capsctrl.que.jp/kdmsnr/wiki/PofEAA/?DomainModel
>>28
> As a result it's still common to see procedures
> that pull data out of an object to do something,
って部分でCOBOLを思い出した。
つか、分かったと思っても、分かったつもりになってそうで怖い。
俺の脳みそじゃ無理っぽ。
こういうのの専門PMのプロジェクトで下で実例みさてもらいたいもんだ。
00301
2009/05/27(水) 22:33:53ID:BGHGVumIご意見ありがとうございます。
GetterEradicatorを読んでみました。
26の説明がpublicなゲッターを用意しないとドメインモデルが構築できない
と誤解を招くということですね。ごめんなさい。
ところで、GetterEradicatorを読んでどうもしっくりきません。
ドメインモデルはビジネスロジックをOOPで実装することですから、カプセル化が
重要なこともわかります。ドメインロジックのメソッドだけが公開されるべきだと。
でも、実際にシステムを作ってみると、関連を辿って画面に表示するだけの
処理がかなりの割合を占めているし、更新処理でDaoに関連する情報を
公開する必要があるので、要件としても、アーキテクチャ的な制約としても
publicなゲッターを用意せざるをえないと思うのです。
0031nobodyさん
2009/05/28(木) 23:17:48ID:MDlOcl5dMartin Fowlerを超えた思考ですね。
笑
0032nobodyさん
2009/05/29(金) 21:01:28ID:IrWAjTycいきなり制約から考えるより、まずはどうあるべきかを考える方がよいですよ。
日本人は、言語やフレームワークは使うものと思いがちですが、理想のためにはルールを変えてしまえばいいのです。
003322
2009/05/29(金) 22:03:56ID:???00341
2009/05/30(土) 03:01:31ID:JVbCJiZbアドバイスありがとうございます。
確かに経験則にとらわれてしまうのはよくないですね。
カプセル化をするには、プレゼンテーション層向けのインターフェースを
用意して、それを使わせるルールにするのが一番簡単だと思いました。
>>33
あはは(^^;独特な言い回しが多いので理解するの難しいですね。
00351
2009/05/30(土) 03:08:08ID:JVbCJiZb自己レスです。
JSTLとかのTaglibはリフレクションしまくりで、インターフェースを
経由できないから結構穴が大きいですな。
00361
2009/05/30(土) 03:17:46ID:JVbCJiZb選ぶべきなのかな。。
0037nobodyさん
2009/05/30(土) 12:21:11ID:7CWJUI3Dまずは画面やデータベースを考えず、ドメインだけを考えた場合の理想的な形を考えてみたらどうですか?
0038nobodyさん
2009/05/30(土) 13:30:13ID:???英語と日本語の壁が大きすぎるのだろうな・・・
ネイティブの人はいいな。
まじめに技術的プログラミングが出来て。
日本なんか、作業だからなw
何も考えちゃいない。
物が来た→処理。
00391
2009/05/31(日) 13:48:40ID:ZKImC4BM理想的な形というのは、
画面やアーキテクチャを無視して、理想的なドメインのモデリングをせよということですか?
それとも、ドメインモデルを中心にして考え直せば、理想的なアーキテクチャが導き出せるということですか?
0040nobodyさん
2009/06/13(土) 19:22:19ID:4WkC2nRlhttp://www.infoq.com/jp/minibooks/domain-driven-design-quickly
0041nobodyさん
2009/09/06(日) 11:48:09ID:???http://msdn.microsoft.com/ja-jp/magazine/ee236415.aspx
0042nobodyさん
2009/09/08(火) 17:52:40ID:???ネタ投下。
こないだ新規システムでアーキテクトやらせてもらえたから、ドメインモデルでやったんだ。
ASP.NET/C#2.0な構成。
俺は最初にコア部分作って後は別の人(外注)だったんだが、出来上がったもの見て落ち込んだ。
テストケースが空メソッドだらけな上にドメイン貧血症っていうかほとんどbean。
コーディングは各々の裁量に任せてたから、結局は俺の指示に不備があったんだと思うんだが、まぁそれはいいとして。
ドメインモデルで組まれたプロジェクトが上手く回った経験あるやついたら聞きたいんだが、末端のコーダーまでドメインモデルのなんたるかを知ってないとうまく回らんかな?
仮に知らなくてもいいって場合でも遵守させることとかあったら聞きたい。
0044nobodyさん
2009/09/26(土) 14:06:38ID:???日本の平均的な技術者のレベルが低いなぁと常々思う。
0045nobodyさん
2009/10/02(金) 18:07:55ID:???一カ所のプログラムのみが肥大化することが多い。
必要な業務処理に対して、
その全体を一つの関数なりメソッドなりに収めようとするから
いわゆるトランザクションスクリプト的な作りになっちゃうんだよね。
書く奴曰く、その方が見通しが良くて判りやすくシンプル、だそうな。
■ このスレッドは過去ログ倉庫に格納されています