寻找计算复杂折扣的模式/最佳实践

时间:2010-02-03 21:30:56

标签: c# design-patterns

我正在开发价格计算引擎。我看了一遍,没有什么比我们需要的更合适。但是,我现在正在研究如何实施具体的价格和/或折扣。我不想向我的最终用户介绍基于规则的引擎,因为他们不会得到它。

例如,当您订购ItemX时,价格为30美元。但与ItemY结合使用,ItemX的价格为20美元。或者在订购五件ItemX时,每件只需15美元。

关于从哪里开始的任何想法?怎么拿这个?也许某些(开源)示例应用程序包含这些实践?我可以使用的任何(技术)模式?最好是在C#中。 提前谢谢!

4 个答案:

答案 0 :(得分:4)

您可以通过多种方式实现这一目标,但我认为对您最有用的方法是定义一个可用于表达折扣的DSL,以便轻松解释和合理化与商业用户。来自ayende's articles on DSLs in boo之一的示例是:

apply_discount_of 5.percent:
     when order.Total > 1000 and customer.IsPreferred
     when order.Total > 10000

suggest_registered_to_preferred:
     when order.Total  > 100 and not customer.IsPreferred

正如您所看到的,您可以看到,这是您可以打印出来并向客户展示的东西,他们会立即了解正在发生的事情。

当然,开发这样的东西既耗时又昂贵,并且充满了时髦的边缘情况。然而,它具有可以进行单元测试,执行和调试的代码的好处。

如果嘘不是你的事,那么也许你可以看看在ironruby,ironpython或F#中定义类似的东西。但是,我建议远离XML来定义这些规则,除非你真的享受痛苦的世界。

然而,这是像Biztalk这样的产品设计用来处理的东西。您评估和发现哪些规则引擎缺乏?

答案 1 :(得分:4)

忙着看着类似的情况,发现Decorator模式是个不错的选择。

http://www.dofactory.com/Patterns/PatternDecorator.aspx

退房:http://www.itarchitect.co.uk/articles/display.asp?id=357

干杯

同时检查我正在寻找实施折扣的策略类型模式: Discount strategy in shopping cart and orders

答案 2 :(得分:3)

我们使用规则引擎进行此类复杂计算。我们的平台是Java,我们使用Drools(我们很满意)。 Drools也可用于.Net。这是一个开源Rules Engines for .NET列表。

答案 3 :(得分:2)

我很遗憾不得不这样说,但是这似乎是你必须应用一些定价规则引擎来实现你的目标

看起来你必须

  • 存储可用商品及其商品 每次购买的折扣。
  • 存储组合的项目 相互打折。
  • 也许可以考虑每一个 每单位购买的单位/数量,或 也许每包/特别。
  • 可能想看看保持一个 归档/存储这些 特价/套餐,只是加入 客户希望转载 原始发票

一般情况下,可以考虑很多可能的规则/组合,并且您作为开发人员可以实现这些规则/组合并将其隐藏起来,或允许用户创建它们,但有人必须这样做所以

然后,当你不想实现自己的时候,GOOGLE shold提供了一些:

Open Source Rule Engines