我们的公司目前有一家在线商店,最近我们一直在为客户提供免费特价。现在,我们只显示特价商品,并给买方通知,说明我们将在结帐后将额外的免费物品添加到他们的订单中。当然,最好将整个过程自动化。

我一直在考虑一些想法,主要是创建一个Discount模型(在这种情况下,我使用的是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
       )


这种逻辑的作品。然后,我可以查看他们的购物车中有什么,并对照模型中的现有Discounts进行测试,看看它们是否适用于任何东西。最大的问题是,它会变得非常混乱,特别是如果您有多个特价项目,而我只是觉得效果不佳。

不幸的是,这真的是我目前最好的想法。所以,我来问你们:您认为什么是最好的方法?我不是在寻找代码,只是在寻找一些逻辑思想和实现方法。 :)

提前致谢!

最佳答案

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

折扣是一团糟,因此不得不与他们合作会使您感到厌烦。从设计的角度来看,测试应该是Discount实例的一部分,即应该有appliesTo(cart)方法和apply(cart)方法。第一个告诉您是否有折扣,第二个告诉您是否实际应用折扣。我建议apply()方法不要更改购物车的“用户部分”,而是修改多余的字段,因此您可以轻松地重置购物车(除去所有折扣)并再次运行该过程。

这样,您可以干净地实施两种最经常出现的折扣类型:“购买Y时免费获得X”和“如果购买Y $$$则获得X%的折扣”。由于您没有更改原始数字,因此可以轻松地应用多个折扣和返利。

我还建议使用大量的单元测试来支持这一点,以确保整个过程表现出预期的效果。否则,下一个折扣可能是您的最后一个折扣。 :)

10-08 05:38