2009-11-09 75 views
1

我們的業務目前擁有一個網上商店,最近我們一直在提供免費的特惠給我們的客戶。現在,我們只需顯示特價商品,並向買家發出通知,說明我們會在結帳後向訂單添加額外的免費商品。當然,將整個過程自動化會很好。務實加入贈送品/贈品到在線商店

我一直在思考幾個想法,主要是創建一個折扣模型(我在這種情況下使用Django,但這更多的是一個邏輯問題),並讓該模型具有各種標誌和產品列表所以我可以創建一個這樣的實例:

Discount(
     description="Get one free pair of bands when you buy two pairs of shoes.", 
     valid_products=[BigProductA, BigProductB], 
     received_products=[FreebieProductA, FreebieProductB], 
     special_in_intervals=2, # Whenever the user buys 2, give one for free 
     ) 

這種邏輯類型的作品。然後,我可以看看他們的購物車中有什麼,並測試模型中現有的折扣,看看他們是否申請了任何東西。最大的問題是它會變得非常混亂,特別是如果你有多個特別的事情發生,我只是不認爲它工作得很好。

不幸的是,這是真正爲這個權利我的最好的辦法了。所以,我來問你們:你認爲最好的方法是什麼?我不是在尋找代碼,只是一些邏輯思路和方法來做到這一點。 :)

在此先感謝!

回答

2

歡迎來到地獄。停留片刻。 ;)Ahem。

折扣是一個爛攤子,所以這並不奇怪,你覺得具有與他們合作的污染。從設計角度來看,測試應該是Discount實例的一部分,即應該有appliesTo(cart)方法和apply(cart)方法。第一個告訴你是否應用折扣,第二個實際應用折扣。我建議apply()方法不會更改購物車的「用戶部分」,而是修改額外的字段,以便您可以輕鬆地重置購物車(放棄所有折扣)並再次運行該過程。

通過這種方式,您可以清楚地實現兩種最經常出現的折扣類型:「購買Y時免費獲得X」和「如果您購買Y $$$時獲得X%折扣」。由於您不更改原始數字,因此您可以輕鬆應用多種折扣和折扣。

我也建議用一大堆單元測試來支持它,以確保整個事情按照您的期望行事。否則,下一個折扣可能是你的最後一個:)

+0

感謝您的答案。到目前爲止,我將所有的邏輯都保留在Discount模型中,並且我打算保持這種模式。我最大的問題是給用戶免費的項目從列表中選擇,然後不知道再做一次。你會在哪裏存儲這些數據?我有一些想法,但他們都開始良好,然後陷入凌亂的邏輯和太多的步驟。仍然認爲,雖然... – Bartek 2009-11-09 16:22:58

+0

我會將它存儲在購物車中的特殊/其他領域。您必須能夠識別添加折扣的額外項目等。這樣,總計算器可以忽略它們,而渲染器仍然可以顯示它們。如果你需要的話,不要猶豫,在購物車中的物品上添加短暫的場地;只是不要修改其他領域的數據。 – 2009-11-09 16:40:10

+0

謝謝,這似乎是最好的路線。當然會寫許多單元測試,以確保它能正常工作,哦,上帝.. :) – Bartek 2009-11-09 17:00:36

0

我不安靜得問題 - 但是如果你選擇不重複的(我在SQL編寫的「僞邏輯」)匹配在車上的物品,所有免費項目,然後如果你想給只有一個或N人 - SELECT TOP(N)從tblFREE DISTINCT其中freebeid中(選擇TBL itemsfreebe freebdid其中(選擇從購物車中筆數其中,**** freebe givaway LOGIC ***))

freebe贈品邏輯是應該始終評估是否爲真的通用佔位符:

like like where(從購物車中選擇count(*)> 2) 因此,如果邏輯工作 - 您將獲得列表中的項目,如果不 - 你什麼都得不到。

您可以將此邏輯轉移到你的代碼並運行只在數據庫「查詢」的第一部分...

邏輯可以用AND或OR與其他邏輯使用....

一旦用戶接受報價 - 您將列表添加到購物車,並應該提供一個標誌,折扣/ freebee應用 - 所以它不會發生兩次...

我想知道它是什麼意思它更容易SQL比說它:-)

我希望TARG ETS你的問題......