如果我们有多对多关系,我们通过引入参考表将它们分解为 1-m,并且应该在 ER 图中进行描述。
例如,如果 Item 和 Order 是 mm,我们引入了 ItemOrder 参考表。
但是在开发系统时,我们是否将 ItemOrder 标识为实体(域类)?
是的,不,也许。
你会ItemOrder
上课吗?也许!
它会是一个“域类”吗?不,它不会。域类中的关键字是domain。领域类的构成取决于您的利益相关者如何看待该领域。在这种情况下,他们可能从未想过“物品订单”——只有一个订单,它与物品有关系。“订单”和“项目”是相关的领域概念,因为您的利益相关者很熟悉它们;“项目顺序”不是。
但无论如何你可能有一个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;
}
}