通常,當客戶點擊電子商務網站的「結賬」按鈕,就完成結帳過程是這樣走:建模電子商務網站結賬
- 更新/確認的產品數量在購物車
- 輸入地址,選擇送貨方式
- 輸入信用卡的詳細信息
- 檢查所有訂單的詳細信息,點擊「確定」進行支付
- 「謝謝你」頁面,訂單號
客戶點擊結賬的步驟4「確認」後,我們通常需要創建一些數據庫對象包括:
Order
Invoice
(其中有一個關係到相應的Order
)Payment
(其具有相對於對應的Invoice
)
我首先想到的是應該發生這樣的事情:
- 創建訂單細節的
Order
對象 - 與訂單的總成本創建一個
Invoice
對象 - 創建
status=PENDING
一個Payment
對象並嘗試對信用卡收費 - 如果收費成功,請將
Payment
更新爲status=SUCCESS
,並將客戶重定向至「謝謝」頁面 - 如果扣款失敗,系統更新
Payment
到status=FAIL
並返回客戶提供錯誤信息到步驟4中顯示
然而,這個流程的一個問題:如果扣款失敗並返回客戶步驟4,如果再次點擊「確認」重新嘗試付款,將會生成重複的Order
和Invoice
。
爲避免這種情況,我們可以修改此流程,只創建新的Order
和Invoice
(如果它們不存在)。但是,問題在於用戶可能會回到步驟1,更改訂單,然後嘗試再次付款。在這種情況下,Order
和Invoice
對象將不正確,因爲訂單已更改。
所以爲了避免這種情況,我們可以更新現有的Order
和Invoice
(如果它們已經存在),但現在看起來過於複雜,並且打破了發票應該是不可變的通用慣例。
建模的最佳方式是什麼?
我認爲,但我會失敗沒有鏈接到任何訂單或客戶的付款對象。 – aco
讚賞這個討論 - 編輯上面 – cartalot
謝謝,我想我會做的只是一旦支付成功創建'Order'和'Invoice'對象,並有一個'Payment.notes'字段,我可以添加關於什麼的消息付款是用於失敗的付款。 – aco