软件设计:带有定制产品的购物车

Software design: Shopping Cart with custom products

我正在建立一个电子商务网站,目前,我需要设计购物车。我的要求包括拥有可能有或没有选择(不同种类的面包、额外的奶酪……)的产品(例如汉堡包)。 将产品存储在购物车中的最佳方式是什么? 存储为数组感觉非常灵活,但会使事情变得更困难,例如计算每种类型的产品数量或在 default/custom 中进行分类(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
  },
]

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

这里有两种广泛的方法。

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

在您的模型中,那将是

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

另一种模式是“Bill of materials”方法,您可以将项目组合在一起以指定订单中的每个项目。如果没有预定义的选项集,或者所有选项都可以自定义,这很适合 - 例如“芝士汉堡,但芝士不要太多”。

在您的模型中,

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

产品变体相对容易使用,但需要您提前设置所有选项。麦当劳非常适合“产品变体”选项 - 您可以有 small/medium/large、single/double 等。“膳食”选项的数量有限。

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