Go項目實戰-購物車功能的核心接口開發
本節我們開始商城項目購物車模塊的開發,本節大綱如下:
圖片
購物車功能分析
購物車作為商品和訂單的中間角色,讓用戶有機會一次性選購多個商品后再進行下單結賬。
首先我們分析一下購物車都有哪些功能,其實從上面的思維導圖列出來的分支我們就能看出來,基本上購物車都會有下面這些功能:
- 添加購物車
- 修改購物車的購物項
- 刪除購物車的購物項
- 查看購物車中的購物項列表
- 查看購物結算信息
我們在項目的需求分析章節中,分析過購物車和其他業務實體的關聯,以及它自身內部細節,并且推演出了它在數據庫中的表結構如下:
圖片
所以在實現購物車功能時,都是圍繞shopping_cart_items這個表做的文章。這里我重點提一下購物車幾個功能中需要注意的用戶交互細節。
首先是修改購物項,這個功能只允許我們修改購物項對應的商品數量。而且每次請求只能修改一個購物項,比如下面這個美團外賣上我添加了幾個商品到購物車,在購物車頁面中修改購物時,每次只能單獨對一個商品進行加減。
圖片
有類似邏輯的還有購物車的刪除,也是每次只能刪除購物車中的一個購物項,刪除對應的左滑交互相信大家都已經很熟悉了。
圖片
我們再來看購物車結算功能,購物車的結算為了保障數據一致性還是應該由服務端來做,包括能使用的優惠券、參與的滿減活動等等在結算時都由服務端考慮進去后再計算實際金額,客戶端最好不要參與計算,否則極有可能出現算錯賬的問題(關于滿減、優惠券,我們再下一節在購物車實現中引入職責鏈模式后再去實現,本節就是一個比較簡單的結算信息的計算)。
除此之外還有一點是,我們結算時有可能不結算購物車中的某個購物項,比如像下面這樣,最后一個商品沒有選擇結算。
圖片
那么此時就要求購物車結算這個功能,不能是服務端去讀取用戶當前在shopping_cart_items表中的購物項,而是需要讓客戶端把參與結算的購物項的ID傳上來,服務端再去結算結算信息。
好了購物車的功能及需要注意交互和實現方式的功能細節我們就差不多講完了,接下來我們去實現功能吧,為了控制篇幅,我們簡單的功能就一帶而過,大家可以去項目中看代碼,在文章中主要突出講解一些重點代碼。