2

この単純な例のドメイン モデルをどのように作成しますか? レシピには多くの材料を含めることができ、材料は多くのレシピで使用できます。各レシピで使用される各材料の量も保存されます。このデータと関係を格納するために、次の 3 つのデータベース テーブルを設計しました。

これを表すドメイン モデルを作成しようとしています。2 つのクラスを持つ基本的な例があります。その後、新しい素材を作ろうと考えたときに、このモデルで問題が発生しました。数量プロパティのないクラスが必要です。これをどのようにモデル化する必要がありますか?

データベース テーブル

代替テキスト http://img190.imageshack.us/img190/340/databasex.png

ドメイン モデル

代替テキスト http://img24.imageshack.us/img24/8859/classesy.png

4

4 に答える 4

3

ドメイン駆動型の設計を行おうとしている場合は、テーブルから始めないでください。基礎となるドメインを反映する概念モデルを最初に作成します。私は ndp に同意します: RecipeIngredient は、DDD の観点からすると、少し厄介な名前/概念です。

モデルには次の概念が必要だと思います: Recipe、Ingredient、Measure、RecipePreparation。

レシピは、材料の集合体です。Recipe に属する各 Ingredient には、準備の仕様として、それに関連付けられた Measure が必要です。また、レシピの特定の準備中に使用される各材料の実際の量を関連付けるために RecipePreparation をモデル化する必要があります。

メジャーは、単位と量で構成されます (例: 2 カップ、0.5 オンス、250 グラム、大さじ 2 など)。

ここでは、分析中に混合される可能性があり、分割しておく必要がある 2 つの異なるものがあります。何かを調理するための仕様としてのレシピ/材料/測定 (レシピごとに 1 つのインスタンス) と、1 つの具体的な準備としての RecipePreparation/材料/測定です。特定の人が特定の瞬間に行ったレシピであり、さまざまな手段を使用している可能性があります(レシピの仕様は2つのプレート用であり、4人のゲストがいるため、すべての材料を2倍にします...そのようなもの)。

より深く進んで、交換可能な材料のセットを持つ一部の材料 (たとえば、山羊のチーズがない場合はモッツァレラチーズを使用)、同じカテゴリのレシピのセットを集めたクックブック、レシピの調理時間などのモデル化を開始できます。など

于 2009-09-17T14:55:54.357 に答える
2

ドメイン モデルで、特定の Ingredient と Quantity への参照を含む RecipeIngredient クラスを作成します。

次に、Recipe.Ingredients リストを変更して RecipeIngredient オブジェクトを含めます。最後に、Ingredient クラスから Quantity を削除します。

ヒント: ほとんどの純粋なドメイン モデラーは、最初にドメイン モデルを作成し、後でデータベースに関心を持つべきだと言うでしょう。

于 2009-09-16T04:24:30.020 に答える
0

結合テーブル (数量) にデータがあるため、それを表すクラスが必要です。(他にも選択肢はありますが、検討する価値はありません。)

モデルが大きくなるにつれて、間違いなくここにデータを追加する必要があります。たとえば、レシピの材料の順序をどのように設定しますか?

RecipeIngredient は、ドメイン駆動設計の観点からすると、少し厄介な名前 (および概念) です。気分が良くなるさまざまな名前を思いつくことができるかもしれません。しかし、一般的に、これは必要な実装の詳細です。申し訳ありませんが、参考になる Evan の DDD の本が手元にありません。

于 2009-09-16T04:45:41.083 に答える
0

皆さん、迷っていると思います。元のポスターには正しい衝動がありましたが、間違ったルートをたどっていました。実際、古い Riehl ヒューリスティック (l と r 関係の名前を組み合わせたもの) を使用して彼が示したマッピング テーブルは、それが多対多マッピングであるという事実に対処しているようです。しかし、実際に起こっていることは、ここでロールクラスが必要だということです (Coad のドメイン モデリング アプローチでは、これらを多く使用していました)。ただし、これは Ingredient が既に持っているものです。ただし、ここで抽象化が欠落しているため、ワームの缶が開かれます。これが追加されているものです。それは基本クラス、例えば Food (文字通り、定義上、食べられないものをレシピに追加することはできないため) であると主張することができますが、その場合、すべての食品を説明する負担が発生するか、単に名前を付けることができます。

したがって、私が考える正しいモデルは、特定の量の食品を含む材料を含むレシピです。

于 2009-11-20T19:34:16.877 に答える