代码之家  ›  专栏  ›  技术社区  ›  Dennis van der Stelt

寻找计算复杂折扣的模式/最佳实践[已关闭]

  •  9
  • Dennis van der Stelt  · 技术社区  · 15 年前

    我正在开发一个价格计算引擎。我找遍了所有地方,没有真正符合我们需要的东西。但是,我现在正在研究如何实施特定的价格和/或折扣。我不想向我的最终用户介绍基于规则的引擎,因为他们不会得到它。

    例如,当您订购一个ItemX时,价格为30美元。但与ItemY一起订购时,ItemX的价格为20美元。或者当您订购五个ItemX时,每个订购后的价格仅为15美元。

    关于从哪里开始有什么想法吗?这件事怎么办?也许有些(开源)示例应用程序包含了这样的实践?我可以使用任何(技术)模式吗?最好是C#。

    4 回复  |  直到 10 年前
        1
  •  4
  •   jonnii    15 年前

    有很多方法可以实现这一点,但我认为对您来说最有用的一种方法是定义一个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
    

    正如你所看到的,这是一种你可以打印出来并展示给客户的东西,他们会立即了解发生了什么。

    当然,开发这样的东西很费时、昂贵,而且充满了时髦的边缘案例。然而,它的优点是代码可以进行单元测试、执行和调试。

    如果boo不是你的专长,那么也许你可以考虑在ironruby、ironpython或F#中定义类似的东西。然而,我建议不要使用XML来定义这些规则,除非您真的喜欢痛苦的世界。

    然而,像Biztalk这样的产品就是为了处理这种事情而设计的。您对哪些规则引擎进行了评估并发现其不足?

        2
  •  3
  •   Eric J.    15 年前

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

        3
  •  2
  •   Adriaan Stander    15 年前

    但这似乎意味着您必须应用一些定价规则引擎来实现您所追求的目标 .

    看起来你不得不这么做

    • 存储可用的项目及其 每辆车的折扣。
    • 他们会互相打折。
    • 也可能会考虑per 单位/单位采购数量,或 可能是每包/特价。
    • 这些文件的归档/存储 特价商品/套餐, 客户想要重印这本书 原始发票

    一般来说,可以考虑很多可能的规则/组合,作为开发人员,您可以实现这些规则/组合并向用户隐藏它们,或者允许用户创建它们, 但总得有人这么做 .

    Open Source Rule Engines