帮助需要在JavaEE购物车应用程序中设计订单和发票

时间:2011-07-18 03:55:23

标签: java-ee invoice

我对设计购物车应用程序的类感到有点困惑。

ShoppingCart有一组ShopCartItem个,每个Product包含一个ShoppingCart的实例和数量。 Invoice实例始终存储在会话中。

如下所示,Customer引用了ShopCartItem,一组Order s,日期,发票号和总金额。我该如何设计Customer类?我认为它还应该包含ShopCartItempublic class Invoice { private Long invoiceId; private Customer customer; private Set<ShopCartItem> shopCartItems; private Date invoiceDate; private int invoiceNum; private float totalAmount; private boolean isProcessed; ... } class Product{ private String name; private double price; ... } class ShopCartItem{ private Product product; private int quantity; ... } 和日期。

我担心创建冗余类,但我想要让用户取消订单的功能,因此需要将它们存储在数据库中。

{{1}}

2 个答案:

答案 0 :(得分:1)

我对OO设计没有太多经验,但这是我的两分钱:

我会将shopCartItems移至Order并在其中添加Customer引用和Invoice引用。 Invoice可以有一个Set<Order>或一个引用,并保留当前拥有的其他成员(shopCartItems除外)。

答案 1 :(得分:1)

首先,确切的答案取决于发票和订单类之间的关系。但是,让我假设1个订单始终只生成1个发票。另一方面,发票可以与许多订单相关联。

假设您可以拥有订单和发票类中的所有客户数据,shopcartItem等,但为了避免类似数据的多个实例,您需要这样做:

  1. 订单应包含对相关发票的引用。然后你可以在Order类中有一个方法:order.isInvoiceGenerated()

  2. Order.addItem(ShopCartItem item)应该将项目添加到Order类和Order的相关Invoice对象中。

  3. 对于像Customer / ShopcartItem对象这样的东西,不应该有Invoice类的直接mutators。所以不应该允许invoice.addItem(ShopCart项目)。

  4. 2点和3点以上将确保Order和Invoice对象都在内存中引用Customer / ShopCartItem的相同实例。所以它会使它们保持一致。

  5. 以上设计确保如果您更改了客户订单,则需要重新生成发票。客户取消订单,发票也必须取消。

  6. 请让我知道你对此的看法。