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