有很多,你可以做到这一点的方式,但我认为其中一个可能是最有用的您将需要定义一个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这样的产品被设计来处理的东西。你评估和发现哪些规则引擎缺乏?
我也认为装饰者是最好的解决方案。我正在做一系列责任链,以找出适合特定产品范围的“模块”,并为特定调整添加修饰器。 – 2010-03-11 07:25:54