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