2009-11-09 72 views
1

我们的业务目前拥有一个网上商店,最近我们一直在提供免费的特惠给我们的客户。现在,我们只需显示特价商品,并向买家发出通知,说明我们会在结帐后向订单添加额外的免费商品。当然,将整个过程自动化会很好。务实加入赠送品/赠品到在线商店

我一直在思考几个想法,主要是创建一个折扣模型(我在这种情况下使用Django,但这更多的是一个逻辑问题),并让该模型具有各种标志和产品列表所以我可以创建一个这样的实例:

Discount(
     description="Get one free pair of bands when you buy two pairs of shoes.", 
     valid_products=[BigProductA, BigProductB], 
     received_products=[FreebieProductA, FreebieProductB], 
     special_in_intervals=2, # Whenever the user buys 2, give one for free 
     ) 

这种逻辑类型的作品。然后,我可以看看他们的购物车中有什么,并测试模型中现有的折扣,看看他们是否申请了任何东西。最大的问题是它会变得非常混乱,特别是如果你有多个特别的事情发生,我只是不认为它工作得很好。

不幸的是,这是真正为这个权利我的最好的办法了。所以,我来问你们:你认为最好的方法是什么?我不是在寻找代码,只是一些逻辑思路和方法来做到这一点。 :)

在此先感谢!

回答

2

欢迎来到地狱。停留片刻。 ;)Ahem。

折扣是一个烂摊子,所以这并不奇怪,你觉得具有与他们合作的污染。从设计角度来看,测试应该是Discount实例的一部分,即应该有appliesTo(cart)方法和apply(cart)方法。第一个告诉你是否应用折扣,第二个实际应用折扣。我建议apply()方法不会更改购物车的“用户部分”,而是修改额外的字段,以便您可以轻松地重置购物车(放弃所有折扣)并再次运行该过程。

通过这种方式,您可以清楚地实现两种最经常出现的折扣类型:“购买Y时免费获得X”和“如果您购买Y $$$时获得X%折扣”。由于您不更改原始数字,因此您可以轻松应用多种折扣和折扣。

我也建议用一大堆单元测试来支持它,以确保整个事情按照您的期望行事。否则,下一个折扣可能是你的最后一个:)

+0

感谢您的答案。到目前为止,我将所有的逻辑都保留在Discount模型中,并且我打算保持这种模式。我最大的问题是给用户免费的项目从列表中选择,然后不知道再做一次。你会在哪里存储这些数据?我有一些想法,但他们都开始良好,然后陷入凌乱的逻辑和太多的步骤。仍然认为,虽然... – Bartek 2009-11-09 16:22:58

+0

我会将它存储在购物车中的特殊/其他领域。您必须能够识别添加折扣的额外项目等。这样,总计算器可以忽略它们,而渲染器仍然可以显示它们。如果你需要的话,不要犹豫,在购物车中的物品上添加短暂的场地;只是不要修改其他领域的数据。 – 2009-11-09 16:40:10

+0

谢谢,这似乎是最好的路线。当然会写许多单元测试,以确保它能正常工作,哦,上帝.. :) – Bartek 2009-11-09 17:00:36

0

我不安静得问题 - 但是如果你选择不重复的(我在SQL编写的“伪逻辑”)匹配在车上的物品,所有免费项目,然后如果你想给只有一个或N人 - SELECT TOP(N)从tblFREE DISTINCT其中freebeid中(选择TBL itemsfreebe freebdid其中(选择从购物车中笔数其中,**** freebe givaway LOGIC ***))

freebe赠品逻辑是应该始终评估是否为真的通用占位符:

like like where(从购物车中选择count(*)> 2) 因此,如果逻辑工作 - 您将获得列表中的项目,如果不 - 你什么都得不到。

您可以将此逻辑转移到你的代码并运行只在数据库“查询”的第一部分...

逻辑可以用AND或OR与其他逻辑使用....

一旦用户接受报价 - 您将列表添加到购物车,并应该提供一个标志,折扣/ freebee应用 - 所以它不会发生两次...

我想知道它是什么意思它更容易SQL比说它:-)

我希望TARG ETS你的问题......