首页 > 解决方案 > 软件设计:带有定制产品的购物车

问题描述

我正在建立一个电子商务网站,目前,我需要设计购物车。我的要求包括拥有可能有也可能没有选择的产品(如汉堡包)(不同种类的面包、额外的奶酪……)。将产品存储在购物车中的最佳方式是什么?存储为数组感觉非常灵活,但会使事情变得更加困难,例如计算每种类型的产品数量或在默认/自定义中分类(2 个汉堡,1 个带有额外奶酪的汉堡):

ProductList: [
  {
    name: "Hamburger",
    extras: ""
  },
  {
    name: "Hamburger",
    extras: ""
  },
  {
    name: "Hamburger",
    extras: "Cheese"
  },
]

另一种选择是将它们存储为具有关联数量的对象(我在不同的购物车实现中看到了这一点):

ProductList: [
  {
    name: "Hamburger",
    extras: "",
    quantity: 2
  },
  {
    name: "Hamburger",
    extras: "Cheese",
    quantity: 1
  },
]

我不知道是否有我不知道或取决于域本身的标准方法。非常感谢!

标签: database-designarchitectureshopping-cartsoftware-design

解决方案


这里有两种广泛的方法。

一是要有“变种产品”。这在电子商务解决方案中很常见,其中商品有不同的尺寸、颜色等。如果您提前知道选项是什么(例如,没有自定义选项),并且通常与库存单位相关联,则此方法适用- 一家服装店记录他们有多少 S/M/L 版本的 T 恤库存。如果您可以有效地拥有无限数量的选项,或者可以自定义选项,那么这不是一个很好的选择。

在你的模型中,那将是

ProductList: [
  {
    name: "Hamburger",
    quantity: 1
  },
  {
    name: "Hamburger with cheese",
    quantity: 1
  },
]

另一种模型是“物料清单”方法,您可以将项目组合在一起以指定订单中的每个项目。如果没有预定义的选项集,或者如果所有选项都可以自定义 - 例如“一个带有奶酪的汉堡,但没有太多的奶酪”,这将是合适的。

在你的模型中,

ProductList: [
  {
    name: "Hamburger",
    base_product: "Hamburger",
    quantity: 1
  },
  {
    name: "Hamburger with cheese",
    base_product: "Hamburger",
    extras: 
          {
           name: "Cheese",
           amount: "A little"
           },
    quantity: 1
  },
]

产品变体相对容易使用,但需要您提前设置所有选项。麦当劳将非常适合“产品变体”选项 - 您可以选择小/中/大、单/双等。只有数量有限的“膳食”选项。

另一方面,允许无限菜单组合以及特殊要求的点菜餐厅使用物料清单方法会更好。


推荐阅读