2009-04-07 28 views
1

すべてのDDDエンティティにはIDが必要です。ですから、私の質問は、ProductDetailが製品に関する知識を持っていれば、製品とProductDetailのようなマスター詳細関係にありますか? ProductDetailクラスのProductIDプロパティが必要ですか?データベースでは、これは2つのオブジェクトをリンクする唯一の方法ですが、DDDではこのベストプラクティスなので、もちろん正常です。私はLinq2SqlをORMマッパーとして使用していますので、これは指定されていますが、これは正しい方法ではないと思います。これに知恵の言葉を持っている人は誰ですか?DDD、マスター詳細関係の関連エンティティ

答えて

1

外部キーは、リレーショナルデータモデルの成果物です。オブジェクトモデルはコンテナの概念で動作します。したがって、OrderにはOrder Lineのコレクションが含まれています。注文行に商品などが含まれています

+0

ドメイン駆動型設計とは何が関係していますか? – jlembke

+1

外部キーProductDetailsクラスのProductIdはDDDとは関係ありません。リレーショナルデータモデルの成果物です。それが私の指摘でした。 – Prankster

5

エンドユーザはどのようにProductDetailを取得しますか?答えが製品からその製品にナビゲートされる可能性が高い場合、ProductDetailは単にProductのプロパティ、またはProductのプロパティであるProductDetailsのコレクションの一部です。

オブジェクト指向のコードでは、ProductDetailオブジェクトは親製品への参照を持つ必要はありません。

データベースには、Id列を持つ製品のマスターテーブルがある可能性があります。次に、それが関連している製品のIDへの外部キーを持つProductDetailの子テーブルがあります。

非常に重要ドメイン駆動設計の原則は、OOコードにのみ適用されることを覚えておいてください。リレーショナル・データベースとリレーショナル・データ・モデリングは全く別のものです。

+0

ORMを使用して2つのモデルを結ぶ方法は? ORMは、ProductDetailクラスのForiegnキーを定義させます。 ProductIdを定義せずにドメインモデルを処理できるORMはありますか。 Raw SQLは唯一の方法ですか? –

+0

ORMを使用するのではなく、自分のデータアクセス層を常にロールしています。 Hibernateのような最も良いORMツールは、親テーブルへの外部キー参照を持つ子テーブルをデータベースに作成できるようにする必要があります。 ORMを正しく構成すると、リポジトリは同じDDD集約の一部として親と子の両方を取り出すことができます。 – dthrasher

関連する問題