实施回扣

时间:2009-08-25 11:42:35

标签: design-patterns

经典场景,订单包含订单行。

客户希望能够对整个订单应用折扣,即固定金额或百分比。

实施该方法的最佳方式是什么?

我在考虑在订单对象上存储两个字段:

  • 回扣固定金额
  • 回扣百分比

然后我可以计算总折扣 - 并将折扣作为订单行,每次更改折扣字段或订单行时我都会重新计算。

警告,提示,最佳实践?

3 个答案:

答案 0 :(得分:2)

使用类似复合模式的东西。

回扣不应存储在对象本身内,而应作为外部实体应用。考虑为实际变化提供足够的灵活性。

答案 1 :(得分:2)

将折扣逻辑与订单分开可以更灵活。例如,业务规则可能会更改为具有更灵活的折扣策略,例如折扣仅适用于某些订单行,具体取决于是否对这些商品进行促销。这更类似于策略模式(对于您的场景和业务环境而言可能会或可能不会过度杀伤)。

在这种情况下,订单会有一个外键进入折扣表,该表确定了折扣策略和任何相关数据,如百分比或固定金额。

答案 2 :(得分:1)

您是否考虑过向所有订单行添加折扣。如果没有回扣 - 这是零回扣。可以添加任何折扣。

在这种情况下您应该使用的模式取决于您将如何使用折扣。如果订单上的单一回扣 - 策略非常好。

如果折扣可以互相帮助(首次购买折扣,10000客户和折扣卡),你应该看看装饰师,你必须实施与折扣组合一样多的策略。