寻找计算复杂折扣的模式/最佳实践
我正在开发价格计算引擎。我已经看遍了,没有什么能够真正适合我们需要的东西。不过,我现在正在寻找如何实施特定价格和/或折扣。我不想为我的最终用户引入基于规则的引擎,因为他们不会得到它。寻找计算复杂折扣的模式/最佳实践
例如,当您订购ItemX时,价格为30美元。但是与ItemY组合的ItemX的价格是20美元。或者当订购ItemX的五个时,每个之后将只有15美元。
任何想法从哪里开始?如何接受这个?也许一些(开源)示例应用程序包含这些实践?我可以使用的任何(技术)模式?最好在C#中。 在此先感谢!
忙着看着类似的情况,并发现装饰模式是一个不错的选择。
http://www.dofactory.com/Patterns/PatternDecorator.aspx
退房:http://www.itarchitect.co.uk/articles/display.asp?id=357
干杯
还检查了STRAT型模式我期待在执行折扣: Discount strategy in shopping cart and orders
我很抱歉不得不说这个,但这看起来像你将不得不应用一些定价规则引擎来实现你在之后。
会像你必须
- 商店可用的项目,其 折扣每pruchase。
- 存储哪些项目组合 会相互打折。
- 也可以考虑每 单位/数量购买单位,或 可能每包/特殊。
- 可能想看看在保持 存档/存储这些 特价品/包,只是柜面的 客户希望 原始发票的再版。
一般有很多的,可以被认为是可能的规则/组合,以及你作为开发人员可以实现这些并从用户隐藏它们,或者允许用户创建它们,但总得有人这样做。
然后,当你不觉得实现自己,GOOGLE shold提供一些:
有很多,你可以做到这一点的方式,但我认为其中一个可能是最有用的您将需要定义一个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这样的产品被设计来处理的东西。你评估和发现哪些规则引擎缺乏?
我认为DSL的选择是最好的,我不想给我的顾客这个。他们不理解它,会犯错误,我没有时间去执行例外,因为会有很多!但是,无论如何,也许我会仔细研究一下。 – 2010-03-11 07:25:04
我也认为装饰者是最好的解决方案。我正在做一系列责任链,以找出适合特定产品范围的“模块”,并为特定调整添加修饰器。 – 2010-03-11 07:25:54