1

私はドメイン モデルのアイデアを理解し始めていますが、これがドメイン モデルでどのように実現されているか見落としていることが 1 つあります。それは、グループ化されたデータです。最も明白な例は、動的な列のグループ化とユーザー指定の列の順序の有無にかかわらず、さまざまなレポートです。

具体例を挙げてみます。次のドメイン モデルを想像してください。

Orders [1-to-many] Positions [1-to-many] Production items

シンプルな 3 レベルのリストとして表示されます。

Order 1
- Position 1
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
  - Production item 3, length: 5, weight: 3.456

次に、生産品目から「長さ」フィールド (表示のためだけに、Position エンティティ自体は変更されません) を追加し、このフィールドでグループ化して、Position レベルを変更する必要があります。

Order 1
- Position 1, length: 2.5
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
- Position 1, length: 5
  - Production item 3, length: 5, weight: 3.456

そして次の要件は、ポジションレベルの生産品目レベルから別の合計フィールド「重量」を追加することです。繰り返しますが、展示のみです。

Order 1
- Position 1, length: 2.5, weight: 3.579
  - Production item 1, length: 2.5, weight: 1.234
  - Production item 2, length: 2.5, weight: 2.345
- Position 1, length: 5, weight: 3.456
  - Production item 3, length: 5, weight: 3.456

この「人工」モデルを実現するには、何を変更する必要がありますか?

位置に行く場所には、ある種の複合値オブジェクトが必要なようです: すべての位置エンティティ フィールド + サイズ フィールド + 重量フィールド。私は正しい軌道に乗っていますか?

4

1 に答える 1

0

NHibernate を ORM ツールとして使用している場合は、Projection 関数を使用して、'sum' や 'count' などのグループ化および集計関数を実行できます。ただし、Positionエンティティにはおそらく「weight」フィールドがないため、クエリからどのエンティティを返すかという問題が残ります。私は、PositionQueryResult などと呼ばれる新しいエンティティ (エンティティは適切な言葉ではないかもしれません) を持つ傾向があります。実際の位置エンティティと区別するためのもの。この「エンティティ」には動作がありません。返されるプロパティのみです。私はこれがどこにも提唱されているのを見たことがありませんが、私にとってはうまくいきます。

ただし、これを「レポート」と呼んでいます。ある考え方では、レポートはドメインに含めるべきではなく、別のものであると述べています。ORM はドメイン モデル プログラミングに適していますが、生の SQL は多くの場合、レポートに適しているため、これは従うのに非常に適したパラダイムになる可能性があります。

于 2011-12-21T10:00:11.270 に答える