Java shoppingcart应用程序中类(CartItem和OrderItem)设计中的冗余

Java shoppingcart应用程序中类(CartItem和OrderItem)设计中的冗余,java,jpa,shopping-cart,Java,Jpa,Shopping Cart,我正在尝试使用jpa用java设计和编写一个基本的store web应用程序。 当用户在购物车中选择产品时,我会创建一个购物车项目的列表。 Cartitem的寿命与购物车绑定。当购物车被删除时,其所有cartitems都必须删除。 (购物车在用户完成购买后被删除) 之后,这些选择需要转换为订单。我在每个订单中创建了一个OrderItems列表。然后我发现每个Cartitem都有一个对应的OrderItem。 Orderitem的寿命与订单相关 我是java/javaee的初学者。我想知道我的设计

我正在尝试使用jpa用java设计和编写一个基本的store web应用程序。 当用户在
购物车
中选择产品时,我会创建一个
购物车项目
的列表。 Cartitem的寿命与购物车绑定。当购物车被删除时,其所有cartitems都必须删除。 (购物车在用户完成购买后被删除) 之后,这些选择需要转换为订单。我在每个
订单中创建了一个
OrderItem
s列表。然后我发现每个Cartitem都有一个对应的OrderItem。 Orderitem的寿命与订单相关

我是java/javaee的初学者。我想知道我的设计是否正确。。 这是设计这样一个应用程序的正确方法吗?
CartItem
OrderItem
类看起来太相似了,我想知道是否有冗余

我的实体类现在看起来像这样

class ShoppinCart{

    @OneToMany(orphanRemoval=true, cascade={CascadeType.ALL},mappedBy="order")
    private List<CartItem> citems;
    ...
}

class CartItem{
    Product product;
    int quantity;
    ...
    @ManyToOne
    ShoppingCart cart;
}

class Order{
    @OneToMany(orphanRemoval=true, cascade={CascadeType.ALL},mappedBy="order")
    private List<OrderItem> orderItem;
    private Date orderDate;
    private Customer customer;
}

class OrderItem{
    Product product;
    int quantity;
    ...
    @ManyToOne
    Order order;
}
class-ShoppinCart{
@OneToMany(orphanRemoving=true,cascade={CascadeType.ALL},mappedBy=“order”)
私人名单城市;
...
}
类CartItem{
产品;
整数;
...
@许多酮
购物车;
}
阶级秩序{
@OneToMany(orphanRemoving=true,cascade={CascadeType.ALL},mappedBy=“order”)
私有列表订单项;
私有日期orderDate;
私人客户;
}
类OrderItem{
产品;
整数;
...
@许多酮
订单;
}

是CartItem和OrderItem是冗余的。您不需要在CartItem中存储cart引用。
在我看来,购物车只是一个尚未完成的订单。您可能需要为订单添加一个状态,即待定、已发送、已取消等,因此购物卡可能只是一个具有待定状态的订单。如果您需要一个单独的类,那么只需将其包装,使ShoppingCart具有一个订单(并且没有CartItem列表)。

我将创建通用superclasSomeItem,如果您需要一些其他信息(如itemDeliveryDate),则将其添加到子类中。将CartItem作为OrderItem构造函数的参数将非常有用

此外,不需要从项目到holdin对象(购物车或订单)的导航功能,删除标记为的@ManyToOne属性