多対多の関係がある場合は、参照テーブルを導入して 1-m に分割します。これを ER 図に示す必要があります。
たとえば、Item と Order が mm の場合、ItemOrder 参照テーブルを導入しました。
しかし、システムを開発している間、ItemOrder をエンティティ (ドメイン クラス) として識別しますか?
はい、いいえ、多分。
ItemOrder
クラスはありますか?多分!
それは「ドメインクラス」でしょうか?いいえ、そうではありません。ドメイン クラスのキーワードはdomainです。ドメインクラスを構成するものは、利害関係者がドメインをどのように認識するかによって異なります。この場合、彼らはおそらく「Item Order」について考えたことがありません。ただ Order があり、Items と関係があります。「注文」と「アイテム」は、利害関係者になじみがあるため、関連するドメインの概念です。「商品注文」ではありません。
ItemOrder
とにかくクラスがあるかもしれませんが、それはおそらく内部的なものです。たとえば、Row Data Gatewayオブジェクトを使用している場合、Order
クラスは次のようになります。
public class OrderRDG {
private UUID orderId;
public static OrderRDG[] find() { /* SQL code etc... */ }
public static OrderRDG[] findById() { /* SQL code etc... */ }
public UUID getOrderId() { return orderId; }
public Item getItems() {
ItemRDG[] items = []; // yes, I know Java arrays don't work like this - it's only an example
OrderItemRDG[] orderItems = OrderItemRDG.findItemsByOrderId(orderId);
for(OrderItemRDG orderItem:orderItems) {
ItemRDG item = ItemRDG.findById(orderItem.getItemId());
items.push(item);
}
return items;
}
}