Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 如何以灵活的方式存储产品的多个价格?_Design Patterns_Architecture_E Commerce_Wizard_Shop - Fatal编程技术网

Design patterns 如何以灵活的方式存储产品的多个价格?

Design patterns 如何以灵活的方式存储产品的多个价格?,design-patterns,architecture,e-commerce,wizard,shop,Design Patterns,Architecture,E Commerce,Wizard,Shop,我想建立一个商店,里面的产品有一个小向导,然后通过它来确定价格。在这个例子中,我指的是印刷产品 例如,当你来到商店想要打印一张名片时,你需要决定是要打印黑白还是彩色,是要选择厚纸还是薄纸,是要打印100张、200张、500张还是1000张等等 毕竟会有一个价格,比如说:黑白厚纸,200张=>40张-$ 在现实中,你有更多的选择。因此,正如您所想,有许多价格,其中没有公式 所以我的问题是:我如何处理价格 我的第一个想法:装饰图案 但当我想到这一点时,这不是一个好主意。正如我所说,没有真正的公式,我

我想建立一个商店,里面的产品有一个小向导,然后通过它来确定价格。在这个例子中,我指的是印刷产品

例如,当你来到商店想要打印一张名片时,你需要决定是要打印黑白还是彩色,是要选择厚纸还是薄纸,是要打印100张、200张、500张还是1000张等等

毕竟会有一个价格,比如说:黑白厚纸,200张=>40张-$

在现实中,你有更多的选择。因此,正如您所想,有许多价格,其中没有公式

所以我的问题是:我如何处理价格

我的第一个想法:装饰图案

但当我想到这一点时,这不是一个好主意。正如我所说,没有真正的公式,我还必须生成向导(如果要打印贺卡,可能会有所不同)。此外,我希望能够通过管理界面更改价格,或添加产品,或在产品中添加新的“决策”,如“您想要光滑的纸张吗?”或删除一个(并且仍然保持价格不变)

所以现在我考虑为每个产品使用一个树,在其中我可以添加一个级别(一个新的决策)、度假村级别等等

另一个想法是通过决策构建某种关键对象,并在价格表中查找价格。有点像字典,我在字典中添加决策,然后从中生成一个键,在价格表中查找价格


所以在原型设计之前,我想知道我是不是瞎了眼,看不到明显的解决方案,或者也许还有另一种更优雅的方式,我不知道?

嗯,我的想法相当复杂,但你的愿望也很复杂

您所描述的向导的问题是,在他们做出所有选择后,他们可能希望返回到#2并更改一件事,以查看它如何改变价格-但您构建向导的方式可能会影响以后是否可以做出选择,结果是,您必须为每个产品定制一组相当复杂的代码,而不是将所有内容都很好地存储在数据库中,这样代码就可以完成所有需要的工作,任何产品更改都会进入数据库,而不是代码更改

首先,您需要了解您有定价逻辑,理想情况下,这将与演示分开。换句话说,您应该能够向一位客户演示逐步向导,向另一位客户演示带有复选框选项和字段的单个页面,并让他们使用相同的限制构建相同的内容

尽量避免设计数据库,这样你就不能这样做。换句话说,如果您执行“选择您自己的冒险”样式的向导,您将限制未来的选项(以及客户的灵活性)。原因是,如果我经历了10个步骤,然后改变了第2步,我必须再经历8个步骤-如果你保证我没有重复我已经做过的选择,这可能是好的,但如果我只是改变纸张颜色,我不想再做同样的8个选择。如果你真的这样做了,确保你保持了很多状态,这样他们以前所做的选择在下次通过时会显示为默认值

我会考虑在数据库中增加一个抽象级别。我希望看到一个矩阵,其中包含每个选项以及显示兼容性的产品和流程,而不是通过用户可以选择的树来指定路径

例如,我有三种纸张类型、三种颜色和三种流程:

    • 轻的
    • 正规的
    • 卡片
  • 颜色

    • 红色的
    • 蓝色的
    • 绿色的
  • 过程

    • 印刷品
    • 折叠
    • 束缚
然后我会为每场比赛定价:

        Light   Regular Card    Red     Blue    Green   Print   Fold    Bind
Light                           0.05    0.05            0.001           0.50
Regular                         0.06    0.05    0.07    0.001   0.02    0.80
Card                                    0.06            0.002           0.90
Print                                                   0.002   
Fold                                                            
Bind                            
空格表示不能混合的项目。
值得注意的条目:

  • 打印和打印组合-双面打印更频繁地磨损/堵塞机器
  • 您不能将项目通过折页机多次(折页操作为空)-但您可以列出不同类型的折页及其适用的纸张
  • 您不能绑定折叠的项目
  • 我没有复制矩阵中的项目(即轻纸打印与轻纸打印相同-取决于你如何处理你的查询,你会希望表示这一点,或者以一种无关紧要的方式形成表)
这只是一个简单的实例——每个价格实际上是一个链接到另一个表,如果数量在一定范围内(即,100可能比10便宜),该表给出每个价格。它还将确定费用是每张纸、每项操作还是每项订单,这可能会叠加(因此,考虑到切割器的磨损,每张纸的装订费用可能为0.001美元,每本装订书的价格为0.50美元,然后装订操作的安装费用总共为5美元)

这将很快变得相当复杂,因为你有很多东西,你可以做其他事情

但一旦输入数据,它将为您提供无限的灵活性,可以指定成本并将其呈现给用户。例如,您可能会发现,将每种不同型号的印刷机放在自己的专栏中(而不仅仅称之为所有打印机)并根据纸张类型、颜色和印刷操作为客户找到最低的印刷价格是值得的

您还可以用人工(时间)填写该矩阵,以便您可以在与价格估算相同的位置给出时间估算

无论您是执行向导,还是一次显示页面上的所有内容,此后端都将支持它。看看戴尔在笔记本电脑配置方面做了些什么——你不能用其他东西获得某些东西。s