PoEAA 9.3章

PoEAA輪読
0
mtoyoshi @mtoyoshij

#EAA9_3 やっと理解できた。DataSetはDB、DataTableがテーブル、DataRowが行をあらわしていて、そういう汎用的なものをより具体的に使いやすくするためにフロントにProductとかを入れて、メソッドをそこに配置していく、と。ディスカッションしてよかった。

2010-05-20 09:39:20
ricymst @ricymst

#EAA9_3 メリットは、テーブルを軸にビジネスロジックが体系化されている 。リレーショナルデータベースのメリットを活かせる

2010-05-20 02:41:14
ricymst @ricymst

#EAA9_3 データベースのテーブル1つにつき1つのクラスを持つドメインロジックを構築する。

2010-05-20 02:35:48
ricymst @ricymst

#EAA9_2 テーブルモジュールは、テーブルやビューのレコードセットに関するビジネスロジックを扱う

2010-05-20 02:26:20
huskyhead @huskyhead8080

#EAA9_3 ここまで読んだだけだと、TS=手続き言語的、ドメイン=オブジェクト指向的、テーブルモジュール=社内FW的(.NET)となると、今後注力(慣れる)すべきは今手薄になってるドメイン?

2010-05-19 22:41:06
huskyhead @huskyhead8080

#EAA9_3 使用するタイミングは、共通のテーブル指向のデータ構造をベースにしている場合とあり、.NETの例が書いてあるけれど、業務系SIの経験からすると相当複雑なアプリじゃない限り、このパターンでいいのでは。。。と感じました

2010-05-19 22:38:26
huskyhead @huskyhead8080

#EAA9_3 テーブルモジュールはインスタンスの場合もあれば、静的メソッドが集まったものの場合もある、とあるけど、静的メソッドの例は、コードマスタ参照とかでDB操作にパターンが固定されてる時という理解

2010-05-19 22:32:08
huskyhead @huskyhead8080

@chipstar_light #EAA9_3 ですよね?ホント、似ているなぁと思いました。だから理解しやすかったです

2010-05-19 22:19:52
mtoyoshi @mtoyoshij

#EAA9_3 例:「本棚」と「本」という1対多関連のモデルがあるとする。通常誘導可能性は本棚→本だと思うけど、逆に本から本棚が取れても、まぁそういう時もあるわなと思える。これは許せるんですよ。この例はこれとはちがうよね?嗚呼、俺が感じてるキモさ共感してもらえるかなぁ。

2010-05-19 21:42:38
mtoyoshi @mtoyoshij

#EAA9_3 細かいけど。table = ds.Tables[tableName];で取り出した個別のtableから、table.DataSetってやったらもとのdatasetが取り出せるんだ。。個人的には直感的ではないです。好きじゃない。

2010-05-19 21:35:40
mtoyoshi @mtoyoshij

#EAA9_3 オンメモリなのでレスポンスは早そうだけど、メモリ使用量の観点からは厳しそうだ。ま、絶対使わない(というかアクセスさせるべきではない)別会社のデータとかは流石にのらないと思うけど。やっぱ必要なレコード分だけインスタンスがある方がしっくり。1レコード1インスタンス。

2010-05-19 21:28:23
mtoyoshi @mtoyoshij

#EAA9_3 P138から始まる例のとこ。Contractコンストラクタの引数は、その後RevenueRecognition、Productの引数にも渡されていってるけど、このデータ量はいかほど?thisメソッドでid指定で取れるってことは全データ?

2010-05-19 21:23:55
mtoyoshi @mtoyoshij

#EAA9_3 イマイチこのパターンがしっくりこないのは、.netの例の経験がないからだろう。つまり、”レコードセットがアプリケーション内のデータの主要なリポジトリとなっている”って状況のこと。

2010-05-19 21:08:10
mtoyoshi @mtoyoshij

#EAA9_3 テーブルと1対1が基本。じゃ、joinとかしたくなったらどうするんだろう?と思ってたら、P136の上段に「実際、(中略)テーブル構造よりもビューやクエリーなども含めた(中略)仮想テーブルに依存したもの」とあった。

2010-05-19 21:03:03
mtoyoshi @mtoyoshij

#EAA9_3 トランザクションスクリプトが「こと(処理)」、ドメインモデルが「もの」、テーブルモジュールが「テーブル」に着目。そのままやけど。

2010-05-19 20:52:51
kyoinn3 @XY_kyo

#EAA9_3  このパターンではリポジトリの構成が凄く大事だなと思う。リポジトリの構成が良くないと、このパターンを採用する意味があまりない。

2010-05-19 01:04:39
kyoinn3 @XY_kyo

#EAA9_3 テーブルモジュールはクラス単位で対応するテーブルを構築することを主張している

2010-05-19 00:59:28
kyoinn3 @XY_kyo

#EAA9_3 「ドメインが抱える問題の一つに、RDBとのインターフェースがある」というのはクラスメンバーとRDBテーブルの項目の対応にポイントになっていない

2010-05-19 00:57:23
Takuya Kitamura @chipstar_light

#EAA9_3 一方、うちのフレームワークによく似ているなと思っていたRoRは、ドメインモデル+アクティブレコード「シンプルなドメインモデル」なので少し毛色が違うと。

2010-05-18 23:21:31
Takuya Kitamura @chipstar_light

#EAA9_3 作っていて知らなかった。。。そうだったのか!

2010-05-18 23:21:23
Takuya Kitamura @chipstar_light

#EAA9_3 これも、うちが作っているFWのコンセプトによく似ているし、わざとパクっています。 ということは、うちが作っているFWは.NETを強く意識していたんだけど、それは結局、このテーブルモジュールパターンに該当するアプリケーションを作りやすい仕組みにしていたということ。

2010-05-18 23:20:52
Takuya Kitamura @chipstar_light

#EAA9_3 また、テーブルモジュールから取得されるレコードセットはUIへのバインディング(.NETでいうDataSetバインディング)に優れていて、プレゼンレイヤでも、ある程度RDBを意識した作りにしておくことで、ドメインレイヤとプレゼンレイヤの紐付けを簡単にしていると。

2010-05-18 23:19:51
Takuya Kitamura @chipstar_light

#EAA9_3 この辺りは.NETのDataSetに通じる部分があると書いてあるし、自分たちが今作っているフレームワークにとても似ている まぁ、うちのフレームワークは意識して.NETのDataSetをパクっているわけですが。。。

2010-05-18 23:18:33
Takuya Kitamura @chipstar_light

#EAA9_3 また、特徴としては、このテーブルモジュールを通してやり取りされる個々のデータは、Beanではなく、レコードやレコードセットといったRDBの永続化形式に依存させたオブジェクトにしていること。

2010-05-18 23:18:18