2010-02-03 105 views
8

我正在開發價格計算引擎。我已經看遍了,沒有什麼能夠真正適合我們需要的東西。不過,我現在正在尋找如何實施特定價格和/或折扣。我不想爲我的最終用戶引入基於規則的引擎,因爲他們不會得到它。尋找計算複雜折扣的模式/最佳實踐

例如,當您訂購ItemX時,價格爲30美元。但是與ItemY組合的ItemX的價格是20美元。或者當訂購ItemX的五個時,每個之後將只有15美元。

任何想法從哪裏開始?如何接受這個?也許一些(開源)示例應用程序包含這些實踐?我可以使用的任何(技術)模式?最好在C#中。 在此先感謝!

回答

4

忙着看着類似的情況,並發現裝飾模式是一個不錯的選擇。

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

+0

我也認爲裝飾者是最好的解決方案。我正在做一系列責任鏈,以找出適合特定產品範圍的「模塊」,併爲特定調整添加修飾器。 – 2010-03-11 07:25:54

2

我很抱歉不得不說這個,但這看起來像你將不得不應用一些定價規則引擎來實現你在之後。

會像你必須

  • 商店可用的項目,其 折扣每pruchase。
  • 存儲哪些項目組合 會相互打折。
  • 也可以考慮每 單位/數量購買單位,或 可能每包/特殊。
  • 可能想看看在保持 存檔/存儲這些 特價品/包,只是櫃面的 客戶希望 原始發票的再版。

一般有很多的,可以被認爲是可能的規則/組合,以及你作爲開發人員可以實現這些並從用戶隱藏它們,或者允許用戶創建它們,但總得有人這樣做

然後,當你不覺得實現自己,GOOGLE shold提供一些:

Open Source Rule Engines

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 

正如你可以看到你所看到的,這是什麼樣的事情,你可以打印出來,展示給客戶,他們會立即明白髮生了什麼事情。

當然,開發這樣的東西既耗時又昂貴,而且充滿了時髦的邊緣情況。然而它具有代碼可以被單元測試,執行和調試的好處。

如果boo不是你的東西,那麼也許你可以看看在ironruby,ironpython或F#中定義類似的東西。但是我會建議遠離XML來定義這些規則,除非你真的享受到一個痛苦的世界。然而,這是像Biztalk這樣的產品被設計來處理的東西。你評估和發現哪些規則引擎缺乏?

+0

我認爲DSL的選擇是最好的,我不想給我的顧客這個。他們不理解它,會犯錯誤,我沒有時間去執行例外,因爲會有很多!但是,無論如何,也許我會仔細研究一下。 – 2010-03-11 07:25:04

3

我們對這種類型的複雜計算使用規則引擎。我們的平臺是Java,我們使用Drools(我們很滿意)。 Drools也可用於.Net。這裏有一個開源的列表Rules Engines for .NET