有很多,你可以做到這一點的方式,但我認爲其中一個可能是最有用的您將需要定義一個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