上購物商城系統(tǒng)設(shè)計與實現(xiàn))
簡介本資源是一套完整的基于Spring Boot與Vue.js的前后端分離式網(wǎng)上購物商城系統(tǒng)面向Java Web開發(fā)初學(xué)者、畢業(yè)設(shè)計學(xué)生及全棧入門者解決電商類系統(tǒng)從需求分析到部署落地的全流程實踐問題。壓縮包含774個文件總大小19.59MB涵蓋121個Java后端核心邏輯文件、46個Vue組件頁面、153個JS交互腳本、44個CSS樣式文件及1個MySQL建庫SQL腳本輔以bat啟動腳本、SVG圖標資源與多格式字體文件結(jié)構(gòu)清晰、模塊完整。已有83人學(xué)習(xí)下載資源包含可直接運行的前后端源碼、配套畢業(yè)論文含需求分析、系統(tǒng)設(shè)計、測試方案與結(jié)果分析、以及典型頁面如用戶中心、商品管理、訂單結(jié)算等完整實現(xiàn)。代碼注釋規(guī)范界面采用Element UI構(gòu)建風(fēng)格統(tǒng)一、操作直觀特別適合理解Spring Boot RESTful接口設(shè)計、Vue組件通信機制與MySQL事務(wù)處理等關(guān)鍵技術(shù)點。 最近幫一個學(xué)弟把他的畢業(yè)設(shè)計項目完整跑通了一遍是個基于SpringBootVueMySQL的網(wǎng)上購物商城系統(tǒng)。這個項目在各類課程設(shè)計和畢業(yè)設(shè)計中出鏡率極高網(wǎng)上相關(guān)的源碼版本也五花八門。借著這次梳理我干脆把整個項目的設(shè)計思路、核心代碼邏輯、以及實操過程中最容易踩的坑完整地整理出來希望能讓正在做類似項目的朋友少走點彎路。這套商城系統(tǒng)采用經(jīng)典的前后端分離架構(gòu)后端基于SpringBoot 2.x提供RESTful API前端使用Vue 2.x Element UI構(gòu)建單頁面應(yīng)用數(shù)據(jù)庫使用MySQL 5.7存儲業(yè)務(wù)數(shù)據(jù)。功能覆蓋用戶注冊登錄、商品瀏覽搜索、購物車管理、訂單生成與狀態(tài)流轉(zhuǎn)、后臺商品管理和訂單處理等完整電商閉環(huán)。比較適合正在做畢業(yè)設(shè)計、課程設(shè)計或者想系統(tǒng)學(xué)習(xí)前后端分離開發(fā)流程的同學(xué)參考源碼結(jié)構(gòu)清晰注釋完整能直接在此基礎(chǔ)上做功能擴展。1. 項目整體設(shè)計與技術(shù)選型思路1.1 為什么選擇SpringBoot Vue這套組合早期做Java Web項目主流方案是SSHSpring Struts Hibernate或者SSMSpring SpringMVC MyBatis配合JSP頁面。但這套方案有個很現(xiàn)實的問題前后端耦合嚴重頁面渲染邏輯都在服務(wù)端前端工程師沒法獨立開發(fā)調(diào)試后端改個頁面還要懂前端模板語法。SpringBoot的出現(xiàn)解決了一大批配置痛點內(nèi)置Tomcat、自動化配置、starter機制讓項目啟動從原本的十幾分鐘配置壓縮到幾分鐘搞定。很多同學(xué)第一次用SpringBoot時覺得版本太高會有各種兼容問題其實只要選對版本組合整個開發(fā)過程非常順滑。我這里用的是SpringBoot 2.3.12.RELEASE搭配MyBatis 2.1.4和MySQL驅(qū)動8.0.23這個組合實測很穩(wěn)。前端選擇Vue而不是傳統(tǒng)的JSP或FreeMarker核心原因是Vue的組件化開發(fā)模式和響應(yīng)式數(shù)據(jù)綁定讓復(fù)雜的購物流程邏輯變得非常清晰。比如購物車中商品數(shù)量變化時底部欄的合計金額自動更新這種交互在JSP里需要手動操作DOM代碼冗余且容易出錯而在Vue中只需要維護一個cartList數(shù)組界面自動同步刷新。1.2 功能模塊拆解與數(shù)據(jù)庫表關(guān)系規(guī)劃網(wǎng)上購物商城系統(tǒng)本質(zhì)上是對電商業(yè)務(wù)中“人、貨、單”三個核心對象的管理與流轉(zhuǎn)。我在設(shè)計時把系統(tǒng)拆成了六個核心模塊用戶模塊、商品模塊、購物車模塊、訂單模塊、收貨地址模塊和管理員后臺模塊。這六個模塊的劃分遵循了一個簡單原則——每個模塊只干自己那一攤事模塊間通過接口通信避免業(yè)務(wù)邏輯揉成一團。數(shù)據(jù)庫層面用戶表user與購物車表cart是一對多關(guān)系用戶表與訂單表orders是一對多關(guān)系訂單表與訂單項表order_item是一對多關(guān)系商品表product與訂單項表是一對多關(guān)系商品表與商品分類表category是多對一關(guān)系。這些關(guān)系梳理清楚后表結(jié)構(gòu)設(shè)計和后續(xù)的SQL編寫就有據(jù)可依了。很多同學(xué)一上來就急著建表結(jié)果做著做著發(fā)現(xiàn)字段對不上、查詢要嵌套五六層根源就是沒先把關(guān)系理清。1.3 為什么需要論文配套這個項目標題里帶“源碼論文”說明很可能是面向畢業(yè)設(shè)計場景。項目源碼是工程能力的最好證明而論文則是把工程實踐轉(zhuǎn)化成理論表達的過程兩者結(jié)合才能構(gòu)成一份完整的學(xué)術(shù)交付。論文的主體結(jié)構(gòu)一般圍繞需求分析、系統(tǒng)設(shè)計、數(shù)據(jù)庫設(shè)計、系統(tǒng)實現(xiàn)、系統(tǒng)測試這幾章展開恰好和項目的開發(fā)流程一一對應(yīng)。我的建議是開發(fā)過程中養(yǎng)成隨手記錄的習(xí)慣比如關(guān)鍵表的設(shè)計理由、接口的入?yún)⒊鰠⒍x、核心算法思路等這些素材到最后寫論文時都是現(xiàn)成的內(nèi)容。2. 數(shù)據(jù)庫設(shè)計與核心表結(jié)構(gòu)解析2.1 用戶表與購物車表的設(shè)計細節(jié)用戶表是所有業(yè)務(wù)流轉(zhuǎn)的基礎(chǔ)字段設(shè)計上除了常規(guī)的主鍵ID和用戶名密碼外我還加了手機號、郵箱、創(chuàng)建時間和狀態(tài)標記。密碼字段必須加密存儲這里選用了MD5加鹽的方式鹽值就是用戶名這樣即使數(shù)據(jù)庫泄露攻擊者拿到的也只是密文無法直接反推原始密碼。購物車表的核心邏輯在于“誰買了什么、買了多少”。表中包含用戶ID、商品ID、商品數(shù)量三個關(guān)鍵外鍵同時冗余了加入購物車的時間用于后期做營銷分析。這里有個設(shè)計細節(jié)值得注意商品單價不應(yīng)該存儲在購物車表中而是通過商品ID實時聯(lián)表查詢。原因是商品價格隨時可能調(diào)整如果購物車表存了快照價格用戶結(jié)算時看到的金額和最終支付金額不一致很容易引發(fā)糾紛。同樣訂單項表里的商品名稱和價格快照反而是必須的因為訂單屬于歷史數(shù)據(jù)下單后的商品信息變化不應(yīng)該影響已經(jīng)生成的訂單。2.2 商品表和分類表的設(shè)計考量商品表設(shè)計時我預(yù)留了較多的冗余字段包括商品主圖、輪播圖集、詳情富文本、庫存、銷量、上下架狀態(tài)、是否熱門等。圖片存儲沒有使用獨立的文件服務(wù)器或是OSS而是直接存相對路徑圖片文件放在項目的static目錄下。這樣做的好處是開發(fā)和部署都簡單不需要額外搭建對象存儲服務(wù)適合課程設(shè)計和畢設(shè)這種體量的項目。商品分類表采用單級分類而非無限級分類理由是商城的商品數(shù)量在千級以內(nèi)時單級分類的查詢效率更高且邏輯更簡單。前端導(dǎo)航欄的商品分類列表直接查一張表就行無需遞歸構(gòu)建樹形結(jié)構(gòu)。如果你想把系統(tǒng)擴展成多級分類只需要在分類表中增加一個父ID字段查詢時遞歸組裝即可這個擴展不會影響其他表的既有設(shè)計。訂單表的設(shè)計是整個數(shù)據(jù)庫的核心需要考慮狀態(tài)流轉(zhuǎn)的完整鏈路。我用一個整型字段status表示訂單狀態(tài)0待付款、1待發(fā)貨、2待收貨、3已完成、4已取消。同時記錄訂單創(chuàng)建時間、支付時間、發(fā)貨時間、收貨時間這樣后期管理后臺可以按時間維度統(tǒng)計訂單數(shù)據(jù)。訂單號生成規(guī)則使用的是時間戳加用戶ID再加隨機數(shù)的方式保證唯一性的同時也便于排查問題。2.3 數(shù)據(jù)庫索引與初始化數(shù)據(jù)準備索引這塊我踩過一個小坑。訂單表在沒有索引的情況下按用戶ID查詢訂單列表幾百條數(shù)據(jù)時感覺不出差異但一旦數(shù)據(jù)量破萬查詢延遲明顯上升。后來給user_id、status、create_time三個字段加了聯(lián)合索引查詢性能有了質(zhì)的提升。核心字段建立索引但對text類型的大字段千萬不要加索引不僅無法加快查詢反而會拖慢寫入速度。初始化數(shù)據(jù)方面項目里我預(yù)置了10個商品分類、30個商品、2個測試賬號普通用戶和管理員、以及若干條文章公告數(shù)據(jù)。這樣項目啟動后頁面不會空蕩蕩的演示效果會比較豐滿。千萬不要在空數(shù)據(jù)庫狀態(tài)下啟動項目前端頁面全是空列表給人感覺系統(tǒng)還沒開發(fā)完。3. 后端核心功能實現(xiàn)與關(guān)鍵邏輯3.1 SpringBoot分層架構(gòu)與項目目錄組織項目后端采用經(jīng)典的四層架構(gòu)Controller層負責(zé)接收請求和參數(shù)校驗Service層處理業(yè)務(wù)邏輯Mapper層DAO層與數(shù)據(jù)庫交互Entity層定義實體對象。包結(jié)構(gòu)按com.xxx.shop下拆分controller、service、mapper、entity、config、common六個子包。這個組織方式最大的優(yōu)勢是職責(zé)單一出現(xiàn)問題時能快速定位。Controller層的接口設(shè)計遵循RESTful風(fēng)格商品查詢用GET、登錄注冊用POST、修改購物車用PUT、刪除收貨地址用DELETE。統(tǒng)一通過Result對象返回JSON數(shù)據(jù)Result中包含code、message、data三個字段code為200表示成功其他碼分別表示參數(shù)錯誤、未登錄、服務(wù)器異常等。前端的axios攔截器會對code做統(tǒng)一處理錯誤時彈出Message提示不需要每個接口單獨寫錯誤處理分支。3.2 登錄鑒權(quán)與攔截器實現(xiàn)登錄鑒權(quán)這塊我采用了JWT方案。用戶登錄成功后后端根據(jù)用戶ID和用戶名生成一個tokentoken的有效期設(shè)置為24小時。前端將token存儲在localStorage中每次請求時在請求頭中攜帶Authorization字段。后端通過攔截器統(tǒng)一校驗token的合法性校驗通過后將用戶信息放入ThreadLocal中業(yè)務(wù)層可以直接獲取當(dāng)前登錄用戶不必每個接口都手動解析token。需要注意的一個坑是攔截器的放行規(guī)則。商品瀏覽、搜索、分類查詢這些接口需要放行因為未登錄用戶也應(yīng)該能瀏覽商城但加入購物車、生成訂單、修改個人信息這些接口必須攔截。我定義的攔截規(guī)則如下/api/product/和/api/category/放行/api/cart/、/api/order/、/api/user/**需要登錄態(tài)。同時使用WebMvcConfigurer配置攔截器時要排除登錄接口和靜態(tài)資源路徑否則會出現(xiàn)靜態(tài)資源被攔截導(dǎo)致頁面樣式丟失的問題。3.3 商品分頁搜索與緩存優(yōu)化商品列表接口實現(xiàn)了關(guān)鍵詞搜索和分頁功能使用MyBatis的PageHelper插件完成物理分頁。搜索邏輯的核心SQL如下SELECT * FROM product WHERE name LIKE CONCAT(%, #{keyword}, %) AND status 1 ORDER BY sales DESC LIMIT #{offset}, #{pageSize}這里有個優(yōu)化細節(jié)在搜索SQL中強制限定status1表示只查詢上架商品避免下架商品出現(xiàn)在用戶端的搜索結(jié)果中。同時在SQL層面通過LIMIT做分頁而不是先把全表數(shù)據(jù)查出來再在內(nèi)存中截取數(shù)據(jù)量大的時候這個差異非常明顯。首頁商品推薦邏輯按銷量排序取前幾個不需要每次請求都實時查數(shù)據(jù)庫。我用了SpringCache配合ConcurrentMapCacheManager做了一層本地緩存商品列表接口第一次查詢后結(jié)果緩存5分鐘期間再次訪問直接返回緩存數(shù)據(jù)數(shù)據(jù)庫壓力大幅降低。當(dāng)然這僅適合單機部署的場景如果項目需要多實例部署就得換成Redis做分布式緩存。3.4 購物車與訂單生成的事務(wù)控制購物車接口相對簡單核心是加購和修改數(shù)量的操作。加購時先查詢購物車表是否已存在該用戶的該商品記錄存在則數(shù)量加一不存在則新增一條記錄。這一步我做了唯一索引user_id product_id來防止并發(fā)情況下的重復(fù)記錄。訂單生成是整個系統(tǒng)中事務(wù)性最強的操作涉及多個表的寫操作創(chuàng)建訂單主表記錄、批量插入訂單項、清空購物車、扣減商品庫存。這些操作必須保證原子性任何一步失敗都要回滾否則就會出現(xiàn)訂單生成了但庫存沒扣、或者購物車清空了但訂單沒創(chuàng)建成功這類數(shù)據(jù)不一致的問題。我在Service層方法上加了Transactional注解并指定了回滾異常類型為Exception.class這樣任何運行時異常都會觸發(fā)事務(wù)回滾。訂單超時未支付自動取消的功能我用了Spring的Scheduled定時任務(wù)實現(xiàn)每隔一分鐘掃描一次訂單表將創(chuàng)建時間超過30分鐘且狀態(tài)為待付款的訂單更新為已取消同時恢復(fù)對應(yīng)的商品庫存。對于畢設(shè)項目來說用定時任務(wù)輪詢已經(jīng)足夠不需要引入RabbitMQ這種消息隊列中間件來增加復(fù)雜度。4. 前端頁面實現(xiàn)與交互細節(jié)4.1 Vue項目結(jié)構(gòu)與路由配置前端項目使用Vue CLI 4.x創(chuàng)建配合Vue Router和Vuex。整體頁面結(jié)構(gòu)分為用戶端和管理端兩大塊它們共享同一套登錄狀態(tài)但頁面布局和功能權(quán)限完全不同。用戶端采用經(jīng)典的商城布局頂部導(dǎo)航欄包含Logo、搜索框、購物車入口、用戶下拉菜單中部是商品分類和內(nèi)容區(qū)域底部是版權(quán)信息。管理端采用左側(cè)菜單加右側(cè)內(nèi)容區(qū)的后臺布局。Vue Router的路由配置一個重要的實踐是用路由守衛(wèi)控制訪問權(quán)限。用戶未登錄時訪問購物車、訂單、個人中心等頁面會被重定向到登錄頁管理員未登錄時訪問管理端任何頁面同樣被攔截。實現(xiàn)上只需要在router.beforeEach守衛(wèi)中判斷目標路由的meta信息里的requiresAuth和requiresAdmin字段然后檢查本地存儲中的token和用戶角色信息即可。4.2 商品列表與詳情頁的數(shù)據(jù)渲染商品列表頁是整個系統(tǒng)中最典型的Vue組件展示商品卡片網(wǎng)格。這個頁面的設(shè)計思路是從目錄獲取商品分類列表從商品接口分頁獲取當(dāng)前分類下的商品數(shù)據(jù)。我用Vue的computed計算屬性實現(xiàn)篩選排序后的商品列表這樣商品數(shù)據(jù)源變化時頁面自動重新計算無需手動觸發(fā)渲染。商品卡片組件接收一個product對象作為prop內(nèi)部展示商品主圖、名稱、價格和銷量信息點擊后跳轉(zhuǎn)商品詳情頁。商品詳情頁的重點是圖片展示和SKU選擇。輪播圖組件使用Element UI的el-carousel實現(xiàn)支持左右切換和指示器跳轉(zhuǎn)。加入購物車按鈕調(diào)用購物車接口成功后通過Message組件提示并更新導(dǎo)航欄的購物車數(shù)量角標。這里涉及一個狀態(tài)同步的問題多個組件導(dǎo)航欄、詳情頁、購物車頁需要共享購物車總數(shù)量我用Vuex管理這個狀態(tài)任何組件對購物車的增刪操作都通過commit mutation來修改保證全站只有一個數(shù)據(jù)源頁面之間切換時數(shù)據(jù)不會錯亂。4.3 購物車與訂單結(jié)算的核心交互購物車頁面的交互細節(jié)比較多。商品數(shù)量變化通過el-input-number組件實現(xiàn)綁定change事件后調(diào)用后端接口同步購物車數(shù)據(jù)。勾選商品計算合并金額是關(guān)鍵邏輯我在computed中依賴selectedItems數(shù)組遍歷計算所有勾選商品的小計之和這樣任何勾選狀態(tài)或數(shù)量的變化都會自動觸發(fā)合計金額的重新計算。訂單結(jié)算頁面包含收貨地址選擇和訂單確認兩個區(qū)域。地址列表從后端獲取用戶通過單選按鈕選擇默認地址訂單確認區(qū)域展示商品清單、金額明細和運費。點擊提交訂單后前端先進行一次二次確認彈窗防止用戶誤操作下單。訂單創(chuàng)建成功后跳轉(zhuǎn)到訂單支付頁面由于沒有集成真實的第三方支付支付頁面模擬了支付成功和支付失敗兩個按鈕用于演示訂單狀態(tài)流轉(zhuǎn)。訂單支付成功后用戶可以在訂單列表看到訂單狀態(tài)從待付款更新為待發(fā)貨管理后臺收到新訂單整個閉環(huán)就通了。4.4 管理后臺的商品上下架與訂單處理管理后臺的商品管理頁面使用el-table組件展示商品列表支持按分類篩選和按名稱搜索。上下架操作可以通過el-switch開關(guān)一鍵切換同時商品的新增和編輯使用el-dialog彈窗內(nèi)的el-form表單完成。這里有兩個小技巧一是商品圖片上傳使用el-upload組件action指向后端的文件上傳接口上傳成功后把返回的圖片地址賦值給表單的imgUrl字段二是富文本編輯器我選擇了vue-quill-editor組件可以實現(xiàn)商品詳情的圖文混排存儲到數(shù)據(jù)庫的HTML內(nèi)容在詳情頁通過v-html指令渲染。訂單管理頁面是后臺工作量最大的模塊。管理員可以看到所有用戶的訂單列表按照訂單狀態(tài)進行篩選。待發(fā)貨訂單的操作按鈕是“發(fā)貨”點擊后彈出物流信息填寫表單提交后訂單狀態(tài)從待發(fā)貨變?yōu)榇肇?。待收貨訂單不需要管理員操作等用戶確認收貨后自動變?yōu)橐淹瓿蔂顟B(tài)。這套流程雖然簡單但完整覆蓋了電商訂單的生命周期對理解業(yè)務(wù)流轉(zhuǎn)非常有幫助。5. 部署上線與常見問題排查5.1 從開發(fā)環(huán)境到生產(chǎn)環(huán)境的配置切換開發(fā)環(huán)境下前端通過Vue CLI的devServer配置了代理將/api開頭的請求轉(zhuǎn)發(fā)到后端的8080端口這樣可以避免開發(fā)階段的跨域問題。生產(chǎn)環(huán)境部署時前端項目執(zhí)行npm run build打包成靜態(tài)文件后端使用maven打jar包。我把前端打包后的dist目錄復(fù)制到后端項目的src/main/resources/static目錄下這樣SpringBoot內(nèi)置的Tomcat會直接將前端頁面作為靜態(tài)資源提供訪問整個系統(tǒng)只需要一個8080端口就能跑起來不需要單獨配置Nginx。數(shù)據(jù)庫配置方面我在application.yml中通過spring.profiles.active切換開發(fā)和生產(chǎn)環(huán)境配置。開發(fā)環(huán)境使用本地數(shù)據(jù)庫和打印SQL日志生產(chǎn)環(huán)境切換到云數(shù)據(jù)庫并關(guān)閉SQL日志。部署時使用以下Maven命令打包mvn clean package -DskipTests生產(chǎn)環(huán)境的jar包啟動命令是java -jar shop-0.0.1-SNAPSHOT.jar --spring.profiles.activeprod。項目根目錄下我放置了shop.sql初始化腳本部署時先執(zhí)行該腳本創(chuàng)建數(shù)據(jù)庫表結(jié)構(gòu)和初始數(shù)據(jù)再啟動jar包即可。5.2 MySQL版本兼容性問題的實戰(zhàn)排查這個項目在數(shù)據(jù)庫連接配置上有個比較典型的坑。MySQL 5.7使用com.mysql.jdbc.Driver驅(qū)動而MySQL 8.0以后必須使用com.mysql.cj.jdbc.Driver。如果繼續(xù)用老驅(qū)動連接MySQL 8.0啟動時會直接報ClassNotFoundException。解決辦法很簡單升級MySQL驅(qū)動到8.x版本連接URL中加上serverTimezoneAsia/Shanghai參數(shù)同時把SSL關(guān)閉useSSLfalse否則會有大量SSL警告信息刷屏。另一個常見問題是MySQL 8.0的認證插件問題。MySQL 8.0默認使用caching_sha2_password認證而一些老的MySQL驅(qū)動和連接工具不支持這種認證方式會報Unable to load authentication plugin的異常。解決辦法是在創(chuàng)建用戶時指定使用mysql_native_password認證方式。這一般是環(huán)境配置問題跟項目本身沒有關(guān)系但很多同學(xué)部署時最容易在這里卡住我建議直接使用MySQL 5.7版本少踩很多無謂的坑。如果是首次安裝MySQL也注意編碼格式統(tǒng)一設(shè)置為utf8mb4避免插入表情符號報錯。5.3 前后端聯(lián)調(diào)中的跨域與數(shù)據(jù)格式問題跨域問題在前后端分離開發(fā)中幾乎是逃不開的。開發(fā)階段我使用了Vue CLI的proxy代理解決跨域前端請求的URL不直接指向后端地址而是指向自身的devServer地址由devServer將請求轉(zhuǎn)發(fā)到后端。這樣瀏覽器認為請求是同源的不會觸發(fā)跨域限制。生產(chǎn)環(huán)境因為前后端部署在同一個端口下不存在跨域問題但如果前后端分開部署在兩個域名下就需要在后端配置CORS過濾器允許跨域請求了。數(shù)據(jù)格式問題中最常見的是Long類型和日期類型的精度丟失。MySQL的自增主鍵在數(shù)據(jù)量大了之后會超出JavaScript Number類型的安全范圍約2的53次方減1導(dǎo)致前端拿到的ID精度丟失。解決辦法是在后端實體類的ID字段上使用JsonSerialize注解配合ToStringSerializer將Long類型序列化為字符串。日期格式方面統(tǒng)一在后端配置Jackson格式化yyyy-MM-dd HH:mm:ss否則前端拿到的時間是標準UTC格式顯示在頁面上時差8小時體驗非常奇怪。5.4 論文寫作與系統(tǒng)測試的補充建議最后想分享一點關(guān)于論文和測試配合的經(jīng)驗。系統(tǒng)開發(fā)完成后論文寫作的資料其實都藏在代碼和數(shù)據(jù)庫里關(guān)鍵是整理思路。建議論文的第三章需求分析從項目源碼中的功能模塊圖出發(fā)把小功能點列出后按照角色歸類第四章系統(tǒng)設(shè)計把數(shù)據(jù)庫表結(jié)構(gòu)、系統(tǒng)架構(gòu)圖、關(guān)鍵流程圖整理出來第五章系統(tǒng)實現(xiàn)重點展示核心功能的運行效果截圖和核心代碼片段配上文字說明。系統(tǒng)測試部分建議至少覆蓋以下測試用例用戶注冊、登錄、權(quán)限攔截測試商品瀏覽、搜索、分頁測試購物車增刪改查、數(shù)量修改、合計金額計算測試訂單創(chuàng)建、支付、取消、發(fā)貨、收貨的全流程狀態(tài)流轉(zhuǎn)測試管理后臺的商品上下架、訂單處理測試。把這些用例記錄成表格形式每條用例包含操作步驟、預(yù)期結(jié)果和實際結(jié)果論文的測試部分就有實實在在的內(nèi)容支撐了。根據(jù)我個人的實際經(jīng)驗這類商城的效率瓶頸幾乎都出現(xiàn)在SQL查詢和數(shù)據(jù)庫設(shè)計層面而不是Java代碼層面。開發(fā)時多注意代碼規(guī)范、參數(shù)校驗和異常處理項目上線運行一段時間后你回頭看會慶幸當(dāng)初沒有偷懶。購物車和訂單模塊的狀態(tài)管理建議用常量類統(tǒng)一維護避免魔法數(shù)字散落在業(yè)務(wù)代碼各處這是后期改需求時最重要的維護性保障。本文還有配套的精品資源點擊獲取