基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

ID:39402698

大?。?.52 MB

頁數(shù):74頁

時(shí)間:2019-07-02

上傳者:無敵小子
基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)_第5頁
資源描述:

《基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫

論文題目基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)專業(yè)學(xué)位類別工程碩士201192230427學(xué)號作者姓名指導(dǎo)教師柴玉柱顧小豐高級工程師 分類號密級注1UDC學(xué)位論文基于移動網(wǎng)絡(luò)的手機(jī)商城系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)(題名和副題名)柴玉柱(作者姓名)指導(dǎo)教師顧小豐電子科技大學(xué)孫征高級工程師成都高工太原市重工股份有限公司太原(姓名、職稱、單位名稱)申請學(xué)位級別碩士工程領(lǐng)域名稱專業(yè)學(xué)位類別工程碩士軟件工程提交論文日期2014.3.25論文答辯日期2014.5.23學(xué)位授予單位和日期電子科技大學(xué)2014年6月25日答辯委員會主席評閱人注1:注明《國際十進(jìn)分類法UDC》的類號。 THEDESIGNANDIMPLEMENTATIONOFMOBILEPHONEMALLBASEDONMOBILENETWORKAMasterThesisSubmittedtoUniversityofElectronicScienceandTechnologyofChinaMajor:Author:Advisor:MasterofEngineeringChaiYuzhuGuXiaofengSchool:SchoolofInformationandSoftwareEngineering 獨(dú)創(chuàng)性聲明本人聲明所呈交的學(xué)位論文是本人在導(dǎo)師指導(dǎo)下進(jìn)行的研究工作及取得的研究成果。據(jù)我所知,除了文中特別加以標(biāo)注和致謝的地方外,論文中不包含其他人已經(jīng)發(fā)表或撰寫過的研究成果,也不包含為獲得電子科技大學(xué)或其它教育機(jī)構(gòu)的學(xué)位或證書而使用過的材料。與我一同工作的同志對本研究所做的任何貢獻(xiàn)均已在論文中作了明確的說明并表示謝意。作者簽名:日期:年月日論文使用授權(quán)本學(xué)位論文作者完全了解電子科技大學(xué)有關(guān)保留、使用學(xué)位論文的規(guī)定,有權(quán)保留并向國家有關(guān)部門或機(jī)構(gòu)送交論文的復(fù)印件和磁盤,允許論文被查閱和借閱。本人授權(quán)電子科技大學(xué)可以將學(xué)位論文的全部或部分內(nèi)容編入有關(guān)數(shù)據(jù)庫進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編學(xué)位論文。(保密的學(xué)位論文在解密后應(yīng)遵守此規(guī)定)作者簽名:導(dǎo)師簽名:日期:年月日 摘要摘要近些年來我國網(wǎng)絡(luò)基礎(chǔ)設(shè)施不斷完善、信息技術(shù)不斷發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)實(shí)現(xiàn)了全民普及。隨著第三方支付工具的不斷發(fā)展和完善,網(wǎng)絡(luò)購物日益成為網(wǎng)民日常網(wǎng)絡(luò)生活的一項(xiàng)重要內(nèi)容。目前國內(nèi)的主流電商京東、淘寶、凡客等等都推出了自己的手機(jī)購物應(yīng)用程序,這顯示出各大電商對手機(jī)端網(wǎng)購群體的激烈爭奪。國內(nèi)的手機(jī)市場中智能手機(jī)占據(jù)了半壁江山,這其中安卓智能手機(jī)的市場份額更是達(dá)到了68%,因此選擇在安卓智能手機(jī)平臺上開發(fā)一個手機(jī)購物應(yīng)用程序是很有意義的。實(shí)現(xiàn)了該手機(jī)購物程序客戶端部分的界面開發(fā),以及客戶端和服務(wù)器之間的接口設(shè)計(jì)。整個手機(jī)商城系統(tǒng)基于C/S架構(gòu),由客戶端和服務(wù)器兩個部分構(gòu)成??蛻舳素?fù)責(zé)向用戶呈現(xiàn)各類信息、向服務(wù)器端發(fā)送請求,服務(wù)器端接受處理請求并將處理結(jié)果返回值客戶端??蛻舳擞梢粋€安卓應(yīng)用程序構(gòu)成,該應(yīng)用程序基于Eclipse(集成ADT插件)和AndroidSDK開發(fā),該應(yīng)用程序應(yīng)該實(shí)現(xiàn)商品信息的展示、用戶信息的管理、用戶訂單信息的管理、購物車功能、收貨地址的管理等一系列功能;服務(wù)器端基于SSH架構(gòu)實(shí)現(xiàn)了業(yè)務(wù)邏輯和具體數(shù)據(jù)的分離。開發(fā)過程中的難點(diǎn)主要集中在業(yè)務(wù)邏輯的處理和數(shù)據(jù)持久化的實(shí)現(xiàn)。業(yè)務(wù)邏輯依賴前期的需求分析得到解決,數(shù)據(jù)的持久化借助Hibernate技術(shù)得以實(shí)現(xiàn)。關(guān)鍵詞:智能手機(jī),電子商務(wù),移動購物,C/S架構(gòu),安卓I ABSTRACTABSTRACTThenetworkinfrastructureofChinahasbeenimprovedinrecentyears.Withtheinformationtechnologydeveloping,thecoverageofcomputernetworkhasbecameuniversal.Becauseofthecontinuousdevelopmentofthethird-partypaymenttools,thenetworkshoppingisincreasinglybecomeanimportantthingtotheonlineInternetusersintheirdailylife.ThecurrentdomesticE-business,suchasJingdong,Taobao,Vancl,andsoonhaslaunchedtheirmobilephoneshoppingapplication,itshowsthatthecompetitionformobileterminalonlinegroupshasbecamemoreandmoreintense.IndomesticmobilesmartphonemarketAndroidoccupiedhalf,whichreached68%shareofthemarket.SochoosetheAndroidplatformtodevelopamobileshoppingapplicationisverymeaningful.Theapplicationcanrealizethecommodityinformationdisplay,userinformationmanagement,customerorderinformationmanagement,shoppingcartfunctionality,receivingaddressmanagementandaseriesoffunctions.Icarriedoutthedevelopmentoftheprograminterfaceonclientpart,whichrealizetheinterfacedesignbetweenclientandserver.ThewholemobilephonemallsystembasedonC/Sarchitecture,consistsofclientandserver.Clientisresponsibleforsendingrequeststotheserver,theserveracceptstherequest,processestherequestandreturnstheresultstotheclient.ClientconsistsofanAndroidapplication,theapplicationisbasedonEclipsewiththeAndroidSDKdevelopment;theserverisbasedonSSHarchitecturewhichimplementstheseparationofbusinesslogicandthespecificdata.Thedifficultyinthedevelopmentaremainlyconcentratedonthetreatmentofbusinesslogicanddatapersistence.Businesslogicreliesontheearlyresolveddemandanalysis,anddatapersistenceissolvedbyusingHibernatetechnology.Keywords:Smartphone,E-Business,MobileShopping,C/S,AndroidII 目錄目錄第一章緒論..................................................................................................................11.1研究背景............................................................................................................11.2國內(nèi)發(fā)展現(xiàn)狀及趨勢........................................................................................11.3相關(guān)工作............................................................................................................31.4論文結(jié)構(gòu)安排....................................................................................................4第二章關(guān)鍵技術(shù)介紹....................................................................................................62.1開發(fā)語言JAVA.................................................................................................62.2系統(tǒng)架構(gòu)............................................................................................................72.3安卓開發(fā)技術(shù)簡介............................................................................................82.3.1Android體系結(jié)構(gòu)...................................................................................82.3.2Android應(yīng)用的基本組件.......................................................................82.3.3Android應(yīng)用工程源碼結(jié)構(gòu).................................................................102.4QUARTZ作業(yè)調(diào)度框架.....................................................................................112.4.1Quartz存儲作業(yè)方式............................................................................112.4.2Quartz觸發(fā)器.......................................................................................122.4.3Quartz調(diào)度器.......................................................................................122.4.4Quartz在本系統(tǒng)中的應(yīng)用...................................................................132.5SSH架構(gòu)簡介..................................................................................................132.5.1SSH框架模型.......................................................................................132.5.2數(shù)據(jù)訪問對象技術(shù)(DAO).............................................................132.6本章小結(jié)..........................................................................................................14第三章系統(tǒng)需求分析..................................................................................................153.1系統(tǒng)基本流程簡介..........................................................................................153.2業(yè)務(wù)模塊需求分析..........................................................................................153.2.1注冊登錄模塊需求分析......................................................................153.2.2商品信息展示模塊需求分析..............................................................173.2.3促銷快報(bào)模塊需求分析......................................................................173.2.4購物車模塊需求分析..........................................................................183.2.5訂單模塊需求分析..............................................................................18III 目錄3.3本章小結(jié)..........................................................................................................19第四章系統(tǒng)設(shè)計(jì)..........................................................................................................204.1客戶端和服務(wù)器之間的通信設(shè)計(jì)..................................................................214.1.1連接方式的設(shè)計(jì)..................................................................................214.1.2客戶端服務(wù)器之間的數(shù)據(jù)處理..........................................................214.2業(yè)務(wù)邏輯設(shè)計(jì)..................................................................................................224.2.1登錄注冊模塊業(yè)務(wù)邏輯......................................................................224.2.2商品信息模塊業(yè)務(wù)邏輯......................................................................234.2.3促銷商品信息模塊業(yè)務(wù)邏輯..............................................................244.2.4訂單模塊業(yè)務(wù)邏輯..............................................................................254.2.5購物車模塊業(yè)務(wù)邏輯..........................................................................274.2.6地址管理模塊業(yè)務(wù)邏輯......................................................................274.2.7收藏夾管理模塊業(yè)務(wù)邏輯..................................................................284.2.8訂單管理模塊業(yè)務(wù)邏輯......................................................................284.3系統(tǒng)數(shù)據(jù)持久層設(shè)計(jì)......................................................................................294.3.1基礎(chǔ)數(shù)據(jù)模型設(shè)計(jì)..............................................................................304.3.2登錄注冊模型持久化設(shè)計(jì)..................................................................314.3.3商品信息模型持久化設(shè)計(jì)..................................................................314.3.4促銷商品信息模型持久化設(shè)計(jì)..........................................................334.3.5購物車模型持久化設(shè)計(jì)......................................................................344.3.6訂單模型持久化設(shè)計(jì)..........................................................................354.3.7地址管理模型持久化設(shè)計(jì)..................................................................364.3.8收藏夾模型持久化設(shè)計(jì)......................................................................374.4本章小結(jié)..........................................................................................................37第五章系統(tǒng)實(shí)現(xiàn)..........................................................................................................385.1客戶端和服務(wù)器之間的通信..........................................................................385.1.1通信連接的建立..................................................................................385.1.2通信數(shù)據(jù)的處理..................................................................................395.2系統(tǒng)功能模塊的實(shí)現(xiàn)......................................................................................395.2.1用戶登錄注冊功能的實(shí)現(xiàn)..................................................................405.2.2商品信息展示功能的實(shí)現(xiàn)..................................................................435.2.3促銷商品信息展示功能的實(shí)現(xiàn)..........................................................455.2.4購物車功能的實(shí)現(xiàn)..............................................................................47IV 目錄5.2.5結(jié)算模塊功能的實(shí)現(xiàn)..........................................................................495.2.6訂單模塊功能的實(shí)現(xiàn)..........................................................................525.2.7收藏夾模塊功能的實(shí)現(xiàn)......................................................................535.2.8其他模塊功能的實(shí)現(xiàn)..........................................................................555.3系統(tǒng)持久層的實(shí)現(xiàn)..........................................................................................575.4軟件測試..........................................................................................................575.4.1性能測試..............................................................................................575.4.2兼容性測試..........................................................................................585.4.3平臺適配性..........................................................................................595.5本章小結(jié)..........................................................................................................59第六章總結(jié)與展望......................................................................................................60致謝................................................................................................................................61參考文獻(xiàn)........................................................................................................................62V 第一章緒論第一章緒論在本章中主要介紹了現(xiàn)階段手機(jī)網(wǎng)上商城的一些特點(diǎn)、手機(jī)商城國內(nèi)外的發(fā)展現(xiàn)狀,以及論文的主體內(nèi)容和論文的結(jié)構(gòu)框架。1.1研究背景近些年來隨著我國網(wǎng)絡(luò)基礎(chǔ)設(shè)施的不斷完善、信息技術(shù)不斷發(fā)展,計(jì)算機(jī)網(wǎng)絡(luò)已經(jīng)在全國范圍內(nèi)實(shí)現(xiàn)了全民普及。伴隨著第三方支付工具的不斷發(fā)展和完善,網(wǎng)絡(luò)購物日益成為網(wǎng)民日常網(wǎng)絡(luò)生活的一項(xiàng)重要內(nèi)容。2012年7月12日,中國互聯(lián)網(wǎng)信息中心(CNNIC)在北京發(fā)布了第30次《中國互聯(lián)網(wǎng)發(fā)展?fàn)顩r統(tǒng)計(jì)報(bào)告》,該報(bào)告顯示,截止2012年6月底,我國的網(wǎng)民數(shù)量已經(jīng)躍居5.4億,增長速度進(jìn)一步放緩,這其中手機(jī)網(wǎng)民的數(shù)量達(dá)到3.88億,手機(jī)終端已經(jīng)實(shí)現(xiàn)了對PC(臺式機(jī))的超越,成為排名第一的網(wǎng)絡(luò)訪問終端。隨著第三代移動通信技術(shù)(3G)的廣泛普及,移動終端的數(shù)據(jù)傳輸率會大大提高,擺脫2G時(shí)代手機(jī)訪問網(wǎng)絡(luò)的高延遲問題,再結(jié)合手機(jī)購物方便、快捷,不受時(shí)間地點(diǎn)約束的特點(diǎn),我們有理由相信,手機(jī)購物會繼網(wǎng)絡(luò)購物之后成了公眾購物的最佳選擇[1]。目前主流的智能手機(jī)平臺有微軟的WindowsPhone平臺,蘋果的IOS平臺,以及Google的安卓平臺。而之前紅極一時(shí)的諾基亞Symbian(塞班),黑莓的BlackberryOS已經(jīng)因?yàn)槁湮槎饾u被市場所淘汰。在所有這些智能手機(jī)操作系統(tǒng)中谷歌的安卓平臺,借助開源的策略迅速占領(lǐng)智能手機(jī)市場的半壁江山。根據(jù)業(yè)界權(quán)威部門的統(tǒng)計(jì),2012年底在中國智能手機(jī)市場上,Android手機(jī)操作系統(tǒng)創(chuàng)紀(jì)錄的占據(jù)了68%的市場份額,所以作者選了安卓手機(jī)系統(tǒng)作為的軟件開發(fā)平臺,這樣會有更好的受眾面[2]。1.2國內(nèi)發(fā)展現(xiàn)狀及趨勢隨著手機(jī)上網(wǎng)用戶數(shù)量的激增,手機(jī)無線上網(wǎng)速度的大大提升,手機(jī)無線上網(wǎng)費(fèi)用的逐漸下調(diào),智能手機(jī)、平板電腦的大量普及,移動電子商務(wù)發(fā)展勢頭越加迅猛。國內(nèi)目前的電商主要由淘寶、京東、凡客、當(dāng)當(dāng)?shù)入娚唐髽I(yè)。因?yàn)橄啾萈C平臺上的購物體驗(yàn),手機(jī)平臺具有顯著的便攜性。用戶可以擺脫時(shí)間空間的限制,在任何時(shí)間任何地點(diǎn)享受購物的樂趣,隨時(shí)隨地快捷地獲取個人所需的信息、服務(wù)、應(yīng)用,滿足用戶的消費(fèi)安全需求。隨著電商之間競爭的白熱化,為了爭奪更1 電子科技大學(xué)碩士學(xué)位論文多的用戶、提高自身的影響力,各大電商除了自己的門戶網(wǎng)站之外,也都開發(fā)了相應(yīng)的手機(jī)端購物軟件,以方便用戶訪問自家商城。隨著電商之間在PC平臺上競爭的白熱化,手機(jī)終端上的競爭也會越來越激烈[3]。未來基于移動網(wǎng)絡(luò)的移動電子商務(wù)發(fā)展的關(guān)鍵點(diǎn)就是二維碼技術(shù)的發(fā)展完善和O2O模式的推廣應(yīng)用。隨著2G、3G甚至4G技術(shù)的發(fā)展完善,用戶從技術(shù)的角度看可以永遠(yuǎn)保持在線,因此二維碼技術(shù)成為了線上活動和線下活動融合的一個關(guān)鍵點(diǎn)和入口。二維碼技術(shù)是O2O模式能夠進(jìn)一步向前發(fā)展的關(guān)鍵所在[4,5]。O2O模式的英文全拼是OnlinetoOffline,是一種將線上商務(wù)活動和線下商務(wù)活動融合在一起的一種技術(shù),用戶可以在互聯(lián)網(wǎng)上完成商品的挑選、服務(wù)的篩選和線上付款,之后可以在線下根據(jù)交易碼進(jìn)行消費(fèi)兌換[6,7]。典型的一種應(yīng)用就是團(tuán)購。O2O模式的示意圖如圖1-1所示:圖1-1O2O模式的示意圖國外的電子商務(wù)也正處于急速發(fā)展的階段,并伴隨著電子支付方式的新需求。隨著科學(xué)技術(shù)的不斷發(fā)展,線上針對實(shí)體零售店的支付工具也出現(xiàn)了很多個性化的改進(jìn),并且在支付業(yè)務(wù)上產(chǎn)生了很多非銀行的支付服務(wù)商,日漸成為銀行業(yè)支付業(yè)務(wù)的競爭對手,甚至部分第三方的支付服務(wù)供應(yīng)商也開始逐步、有限度的進(jìn)入金融服務(wù)領(lǐng)域,國內(nèi)的余額寶也屬于類似的情況[8,9]。目前,歐美國家的電子商務(wù)應(yīng)用領(lǐng)域和交易規(guī)模都遠(yuǎn)遠(yuǎn)領(lǐng)先于其他國家,許多巨型企業(yè)都利用互聯(lián)網(wǎng)技術(shù)擴(kuò)展自己的經(jīng)營業(yè)務(wù)。在全球所有的電子交易額中,單單美國一家就占據(jù)了50%的份額,并且誕生了亞馬遜、谷歌等明星企業(yè)。在電子商務(wù)的發(fā)展史中,移動電子商務(wù)的發(fā)展呈現(xiàn)加速趨勢,預(yù)計(jì)到2015年,移動電2 第一章緒論子商務(wù)份額會占據(jù)總體電子商務(wù)20%的份額[10]。1.3相關(guān)工作手機(jī)網(wǎng)上商城的實(shí)現(xiàn)分為客戶端和服務(wù)端兩部分。服務(wù)端的實(shí)現(xiàn)借助GitHub中的開源項(xiàng)目“RedShopping”來實(shí)現(xiàn),作者主要負(fù)責(zé)客戶端應(yīng)用程序的開發(fā)和實(shí)現(xiàn)。通過學(xué)習(xí)研究Android應(yīng)用程序的開發(fā)流程,Android系統(tǒng)的體系架構(gòu)和特點(diǎn),數(shù)據(jù)庫的設(shè)計(jì)實(shí)現(xiàn),客戶端和服務(wù)器之間的Socket通信,javaEE中的SSH框架,加深了自己對程序開發(fā)的理解,提高了自己的程序開發(fā)能力。一個界面友好,功能合理的手機(jī)商城購物程序,可以為電商吸引更多的客戶,提高自己的知名度。在一定程度上,一個友好絢麗使用體驗(yàn)良好的界面可以決定一個軟件的生命周期。本文接下來將從五個方面描述手機(jī)商城購物程序的開發(fā)過程:1)需求分析這是程序開發(fā)的首要任務(wù),清晰的分析理解問題是解決問題的前提條件,通過需求分析搞清楚程序要實(shí)現(xiàn)的功能,實(shí)現(xiàn)的難點(diǎn),理清各種功能模塊之間的調(diào)用關(guān)系。在需求分析階段,通過使用RationalRose(一種面向?qū)ο蟮慕y(tǒng)一建模語言的可視化建模工具)來畫出客戶端應(yīng)用程序所涉及的主要用例圖、活動圖、以及類圖,在這之后選擇Java語言來自動生成代碼,這樣可以大大提供程序的開發(fā)效率,節(jié)約時(shí)間成本。2)客戶端的設(shè)計(jì)實(shí)現(xiàn)在之前需求分析結(jié)果的基礎(chǔ)之上,依據(jù)需求分析文檔中的要求,逐步實(shí)現(xiàn)客戶端的各項(xiàng)功能。重點(diǎn)實(shí)現(xiàn)的內(nèi)容包括:客戶端程序的界面設(shè)計(jì)和實(shí)現(xiàn)、商品圖片的異步加載方式、一些較大數(shù)據(jù)的壓縮和解壓縮、客戶端和服務(wù)端之間的通信借口設(shè)計(jì)。需要說明的是,在客戶端開發(fā)的過程用使用了代碼版本管理工具Git,Git是一種開放源代碼的分布式版本控制工具,能夠高效的管理軟件項(xiàng)目的開發(fā)進(jìn)程。3)與服務(wù)端的通信通過分析研究,首先定義一種服務(wù)器和客戶端口可以接受的通信格式。其次,根據(jù)客戶端的具體需求,定義一個能夠跟服務(wù)器高效地進(jìn)行數(shù)據(jù)交換的接口。根據(jù)之前需求分析的結(jié)果,從中抽象出各個實(shí)體所對應(yīng)的類,為之后的數(shù)據(jù)庫設(shè)計(jì)打好基礎(chǔ)。最后將定義在需求文檔中的業(yè)務(wù)邏輯接口合理實(shí)現(xiàn)。在設(shè)計(jì)客戶端和服務(wù)器之間通信方式的過程中,作者使用基于JSON的數(shù)據(jù)交換格式,該數(shù)據(jù)格式采用完全獨(dú)立于具體程序語言的本文3 電子科技大學(xué)碩士學(xué)位論文格式,采用C系語言的定義風(fēng)格,易于程序員的編寫閱讀,非常適用于通信壓力較輕的應(yīng)用場合。4)系統(tǒng)的測試和優(yōu)化在客戶端應(yīng)用程序的開發(fā)基本結(jié)束之后,要針對需求分析報(bào)告中的各項(xiàng)功能做一些測試,以保證各項(xiàng)功能都可以正確的實(shí)現(xiàn)。因?yàn)樵摽蛻舳顺绦蛐枰ㄟ^無線網(wǎng)絡(luò)跟服務(wù)器端進(jìn)行交互,所以對通信的實(shí)時(shí)性有較高的要求。因此在分析出性能瓶頸的結(jié)點(diǎn)之后,采取一些措施進(jìn)行優(yōu)化。提高系統(tǒng)的響應(yīng)速度,改進(jìn)人機(jī)交互的體驗(yàn)。1.4論文結(jié)構(gòu)安排根據(jù)軟件的實(shí)際開發(fā)過程,將本論文劃分為六大章節(jié)。第一章緒論在緒論部分,主要介紹了研究課題的背景,相關(guān)課題在國內(nèi)的研究發(fā)展現(xiàn)狀,研究實(shí)現(xiàn)過程中所要解決的一些重要問題和使用到的一些重要技術(shù),以及研究過程的簡略描述。第二章關(guān)鍵技術(shù)介紹在第二章中主要介紹了客戶端應(yīng)用程序開發(fā)過程需要使用的一些關(guān)鍵技術(shù)和應(yīng)用到的技術(shù)架構(gòu)??蛻舳撕头?wù)器兩中程序的開發(fā)都要用到j(luò)ava語言,其中客戶端程序是基于Android平臺的應(yīng)用程序開發(fā),具體的開發(fā)環(huán)境為Eclipse(集成了ADT插件),服務(wù)端使用流行的SSH技術(shù)在MyEclipse環(huán)境下進(jìn)行開發(fā)。整個手機(jī)購物系統(tǒng)采用了經(jīng)典的C/S架構(gòu),通過將任務(wù)合理的分配到客戶端和服務(wù)器端,降低了整個系統(tǒng)的通信開銷。第三章系統(tǒng)需求分析該購物系統(tǒng)的業(yè)務(wù)邏輯一共分為七部分,用戶登陸模塊、用戶注冊模塊、商品展示模塊、促銷商品展示模塊、購物車模塊、訂單模塊、其他功能模塊。良好的系統(tǒng)需求分析能夠?yàn)橹蟮捻?xiàng)目開發(fā)打下良好基礎(chǔ)。第四章系統(tǒng)詳細(xì)設(shè)計(jì)論文在第四章詳細(xì)介紹系統(tǒng)的整體架構(gòu)、客戶端服務(wù)器之間的通信設(shè)計(jì)、業(yè)務(wù)設(shè)計(jì)、持久層設(shè)計(jì),一共四部分。從全局的角度劃分,系統(tǒng)主要分為兩部分:客戶端和服務(wù)器。客戶端指的是Android系統(tǒng)平臺上的應(yīng)用程序。服務(wù)器主要是指由J2EE服務(wù)器、Web服務(wù)器和數(shù)據(jù)庫構(gòu)成的服務(wù)端。第五章系統(tǒng)的實(shí)現(xiàn)在之前完成的系統(tǒng)需求分析和系統(tǒng)詳細(xì)設(shè)計(jì)的基礎(chǔ)上,具體實(shí)現(xiàn)客戶端和服4 第一章緒論務(wù)器之間的通信以及系統(tǒng)各個功能模塊。其中客戶端和服務(wù)器之間通信方式的設(shè)計(jì)尤為重要,因?yàn)檫@關(guān)系到系統(tǒng)的穩(wěn)定性和用戶的使用體驗(yàn),之后根據(jù)業(yè)務(wù)流程分析結(jié)果和數(shù)據(jù)持久化結(jié)果實(shí)現(xiàn)具體的模塊。第六章總結(jié)與展望總結(jié)了全文的主要內(nèi)容。5 電子科技大學(xué)碩士學(xué)位論文第二章關(guān)鍵技術(shù)介紹2.1開發(fā)語言JAVAJava的誕生要?dú)w功于Sun公司的“Green”項(xiàng)目,該項(xiàng)目是為了開發(fā)一種用于管理控制電子消費(fèi)產(chǎn)品的分布式系統(tǒng)。開發(fā)人員最初計(jì)劃使用C++開發(fā),但是因?yàn)镃++的復(fù)雜性和安全性問題,開發(fā)者最后放棄使用C++,選擇在C++的基礎(chǔ)之上開發(fā)一門新的語言O(shè)ak(java的前身)。Oak于1995年1月更名為“java”[11]Java是一種面向?qū)ο蟮母呒壵Z言,它最大的特點(diǎn)就是平臺無關(guān)性,這使得java特別適合網(wǎng)絡(luò)環(huán)境內(nèi)的應(yīng)用程序開發(fā)。目前Java有三種技術(shù)分支,它們分別是JAVASE,JAVAEE,JAVAME。JAVASE是JavaPlatformStandardEdition的英文縮寫,漢語意思是Java平臺標(biāo)準(zhǔn)版,適用于開發(fā)標(biāo)準(zhǔn)的桌面程序、以及各種基礎(chǔ)的類庫。JAVAEE是Sun公司推出的企業(yè)級應(yīng)用程序開發(fā)平臺,能夠讓開發(fā)人員短時(shí)間內(nèi)開發(fā)出健壯、跨平臺和易擴(kuò)展的服務(wù)器端應(yīng)用程序。JAVAME是Sun公司推出的一種針對嵌入式電子消費(fèi)產(chǎn)品的應(yīng)用程序開發(fā)版本。JAVASE是JavaEE和JavaME的基礎(chǔ)[12]。Java的語法特征跟C++語言非常類似,因此有C語言基礎(chǔ)或者C++基礎(chǔ)的程序員可以非常快速的上手Java。但是與C++相比,Java還是有自己的鮮明特點(diǎn):(1)實(shí)現(xiàn)了自動管理內(nèi)存。Java語言本身提供了GC(垃圾回收)機(jī)制,垃圾回收器可以自動的管理應(yīng)用程序所在的內(nèi)存空間,程序員不必再為申請內(nèi)存和釋放內(nèi)存勞心費(fèi)神,徹底遠(yuǎn)離了可怕的內(nèi)存泄露問題。(2)取消了“指針”這一概念,以“引用”代替,使開發(fā)人員擺脫了復(fù)雜的內(nèi)存訪問和內(nèi)存管理問題,從而使java語言開發(fā)出來的程序更加安全健壯。(3)取消了“多重繼承”,只支持單一繼承,增加了接口概念和匿名內(nèi)部類,間接地實(shí)現(xiàn)了“多重繼承”機(jī)制的功能,避免了多重繼承帶來的復(fù)雜性,例如菱形繼承問題、虛函數(shù)問題和訪問權(quán)限沖突問題等等。Java語言是一種解釋型語言,跟C、C++這種類型的語言相比,java的執(zhí)行效率很低。因?yàn)镴ava程序的執(zhí)行必須依賴于Java解釋器,而java解釋器的存在使java真正實(shí)現(xiàn)了“一次編寫,處處運(yùn)行”的目標(biāo),為了達(dá)到這個目標(biāo)而犧牲一部分效率還是非常值得的[19]。另外,Java語言具有特別強(qiáng)大的、易于聯(lián)網(wǎng)的特點(diǎn),因此Java特別適合開發(fā)分布式的程序。在所有的計(jì)算機(jī)高級語言中,使用Java語言編寫Socket程序是最簡單的。6 第二章關(guān)鍵技術(shù)介紹2.2系統(tǒng)架構(gòu)選擇一個合理的系統(tǒng)架構(gòu)能夠很大程度上決定一個項(xiàng)目的開發(fā)成敗。在電子商城類項(xiàng)目的開發(fā)歷史中存在C/S和B/S兩種架構(gòu)。在上個世紀(jì)九十年待,C/S是一種主流的架構(gòu)。但是隨著Web應(yīng)用的快速發(fā)展,C/S架構(gòu)已經(jīng)漸漸地被B/S架構(gòu)所取代[12,19]。在B/S體系結(jié)構(gòu)系統(tǒng)中,用戶通過瀏覽器向分布在網(wǎng)絡(luò)上的許多服務(wù)器發(fā)出請求,服務(wù)器對瀏覽器的請求進(jìn)行處理,將用戶所需信息返回到瀏覽器。B/S結(jié)構(gòu)簡化了客戶機(jī)的工作,客戶機(jī)上只需配置少量的客戶端軟件[13]。服務(wù)器將擔(dān)負(fù)更多的工作,對數(shù)據(jù)庫的訪問和應(yīng)用程序的執(zhí)行將在服務(wù)器上完成。瀏覽器發(fā)出請求,而其余如數(shù)據(jù)請求、加工、結(jié)果返回以及動態(tài)網(wǎng)頁生成等工作全部由WebServer完成。實(shí)際上B/S體系結(jié)構(gòu)是把二層C/S結(jié)構(gòu)的事務(wù)處理邏輯模塊從客戶機(jī)的任務(wù)中分離出來,由Web服務(wù)器單獨(dú)組成一層來負(fù)擔(dān)其任務(wù),這樣客戶機(jī)的壓力減輕了,把負(fù)荷分配給了Web服務(wù)器[14]。這種三層體系結(jié)構(gòu)如圖2-1所示。Browse瀏覽器Web服務(wù)器數(shù)據(jù)庫圖2-1B/S三層架構(gòu)示意圖C/S架構(gòu)主要包括“客服端”“中間件”“服務(wù)端”三大部分。用戶可以通過客戶端應(yīng)用程序向服務(wù)器發(fā)送各種請求,并接受從服務(wù)器返回的數(shù)據(jù)信息。服務(wù)器會接受來自客戶端的信息并作出相應(yīng),同時(shí)負(fù)責(zé)管理系統(tǒng)的各種后臺數(shù)據(jù)和信息,比如數(shù)據(jù)庫信息。服務(wù)器要面對的一個難點(diǎn)就是當(dāng)多可用戶同時(shí)請求同一種資源時(shí),應(yīng)該如何相應(yīng)這些請求[15]。中間件是客戶端程序和服務(wù)端程序溝通的橋梁,主要負(fù)責(zé)數(shù)據(jù)結(jié)構(gòu)的定義和數(shù)據(jù)傳輸[16]。由于安卓平臺的應(yīng)用開發(fā)非常的便捷高效,借住一個自主的APP應(yīng)用程序,可以更加高效合理的展示商品信息,提高用戶的手機(jī)購物體驗(yàn),因此選擇C/S架構(gòu)作為手機(jī)網(wǎng)上商城的系統(tǒng)架構(gòu)。C/S架構(gòu)的示意圖如圖2-2所示??蛻舳酥虚g件服務(wù)器端圖2-2C/S架構(gòu)示意圖7 電子科技大學(xué)碩士學(xué)位論文2.3安卓開發(fā)技術(shù)簡介Android系統(tǒng)基于Linux內(nèi)核,但并不是標(biāo)準(zhǔn)的linux內(nèi)核。為了讓Android系統(tǒng)更加適用于移動終端設(shè)備,google對Linux的內(nèi)核進(jìn)行了各種優(yōu)化和加強(qiáng)。Android平臺采用了一種“軟件疊層”的方式構(gòu)建,它由分別是應(yīng)用程序?qū)印⒖蚣軐?、函?shù)庫層、運(yùn)行時(shí)庫、內(nèi)核五層構(gòu)成[17,18]互獨(dú)立,底層的改變不會影響上層。。這種構(gòu)架方式的好處就是各層之間相2.3.1Android體系結(jié)構(gòu)Android體系結(jié)構(gòu)從上到下一共分為5層,分別是應(yīng)用程序?qū)?、框架層、函?shù)庫層、運(yùn)行時(shí)庫、內(nèi)核。應(yīng)用程序?qū)又饕到y(tǒng)的核心應(yīng)用程序,比如瀏覽器、電話薄、日歷計(jì)算器等等;框架層為應(yīng)用程序?qū)犹峁┝怂枰腁PI,這些API都包含在Google提供的AndroidSDK中;函數(shù)庫由大量的C/C++庫構(gòu)成,這些庫函數(shù)一般不會直接被應(yīng)用程序調(diào)用,而是被框架層的API調(diào)用,而JAVA和C/C++之間的跨語言調(diào)用借助于JNI技術(shù);運(yùn)行時(shí)庫包括核心庫和Dalvik虛擬機(jī),核心庫封裝了JAVA語言的全部功能,Dalvik虛擬機(jī)負(fù)責(zé)安卓應(yīng)用程序的運(yùn)行。內(nèi)核層主要負(fù)責(zé)內(nèi)存管理、進(jìn)程管理、網(wǎng)絡(luò)協(xié)議棧和驅(qū)動模型的實(shí)現(xiàn),位于整個架構(gòu)的最底層[20,21,22]。Android的體系結(jié)構(gòu)圖如圖2-3所示。2.3.2Android應(yīng)用的基本組件Android應(yīng)用程序通常是由一個或者多個基本組件構(gòu)成的。Android應(yīng)用程序的基本組件包括:Activity(活動)、Service(服務(wù))、BroadcastReceiver(廣播)、ContentProvider(內(nèi)容提供者)[23]。其中最常用也是最常用到的組件就是Activity(活動),下面簡要的介紹一下這四種組件。⑴Activity(活動)Activity是Android系統(tǒng)中負(fù)責(zé)跟用戶進(jìn)行交互的組件,它為Android系統(tǒng)提供了可視化的用戶界面。如果一個安卓應(yīng)用程序包含多個用戶界面,那么這個安卓應(yīng)用必將包含多個Activity。多個Activity將組成一個Activity棧,棧頂對象就是當(dāng)前處在活動狀態(tài)的Activity。隨著不同應(yīng)用的交替運(yùn)行,每個Activity都可能從活動狀態(tài)轉(zhuǎn)入非活動狀態(tài),也可能從非活動狀態(tài)轉(zhuǎn)入活動狀態(tài)[24]。Activity具有四種狀態(tài):活動狀態(tài)、暫停狀態(tài)、停止?fàn)顟B(tài)、銷毀狀態(tài)。當(dāng)Activity處于前臺,用戶可見并可獲得焦點(diǎn)的時(shí)候,Activity就處在活動狀態(tài);當(dāng)其他Activity位于前臺,該Activity依然可見但無法獲得焦點(diǎn),該Activity處在暫停狀態(tài);當(dāng)Activity不可見,失去焦點(diǎn)時(shí),該Activity處在停止?fàn)顟B(tài);當(dāng)Activity8 第二章關(guān)鍵技術(shù)介紹圖2-3Android系統(tǒng)架構(gòu)圖所在的Dalvik進(jìn)程結(jié)束時(shí),Activity處在銷毀狀態(tài)。這四種狀態(tài)的切換過程如圖2-4所示。⑵Service(服務(wù))Android系統(tǒng)架構(gòu)中,Activity和Service具有相同的地位。Activity和Service的區(qū)別就是Service處在后臺運(yùn)行沒有圖形界面。Service運(yùn)行起來以后也會具有自己的生命周期。當(dāng)需要在后臺運(yùn)行服務(wù)或者監(jiān)控其他組件的狀態(tài)變化的時(shí)候,就需要借助Service組件了。Service跟Activity類似,也具有自己的生命周期,分別為:創(chuàng)建(onCreate)、開始(OnStart)、運(yùn)行(ServiceRunning)、停止(OnStop)、銷毀(OnDestroy)[25,26]。⑶BroadcastReceiver(廣播)顧名思義,BroadcastReceiver(廣播)代表的就是廣播消息接收器,該組件本質(zhì)上是一種全局的監(jiān)聽器,可以監(jiān)聽的系統(tǒng)全部的廣播。從代碼的實(shí)現(xiàn)角度來看,它非常類似于事件編程中的監(jiān)聽器。與普通的事件監(jiān)聽器不同的是,BroadcastReceiver監(jiān)聽的事件源是Android系統(tǒng)中的組件,普通事件監(jiān)聽器監(jiān)聽的事程序中的對象,利用這點(diǎn)我們可以非常方便的實(shí)現(xiàn)系統(tǒng)中不同組件之間的通信。需要注意的是對廣播的濫用會加重系統(tǒng)的功耗負(fù)載。9 電子科技大學(xué)碩士學(xué)位論文圖2-4Activity生命周期⑷ContentProvider(內(nèi)容提供者)Android系統(tǒng)中每個應(yīng)用程序都運(yùn)行在各自的Dalvik虛擬機(jī)中,也就是說應(yīng)用程序之間是相互獨(dú)立的。但是在很多情況下,應(yīng)用程序之間也是需要實(shí)時(shí)地交換數(shù)據(jù)的,例如打電話的程序就要調(diào)取聯(lián)系人應(yīng)用中的電話號碼。ContentProvider就是Android系統(tǒng)為跨應(yīng)用進(jìn)程之間的數(shù)據(jù)交換設(shè)定的一種標(biāo)準(zhǔn)。通常ContentProvider和ContentResolver是配套使用的,一個應(yīng)用程序使用ContentProvider暴露自己的數(shù)據(jù),使用ContentResolver訪問別的應(yīng)用程序的數(shù)據(jù)。2.3.3Android應(yīng)用工程源碼結(jié)構(gòu)目前,Android應(yīng)用程序的主流開發(fā)平臺是Eclipse。通過在Eclipse中安裝ADT插件,用戶可以非常方便的生成Android工程、管理虛擬機(jī)鏡像(AVD),調(diào)試Android應(yīng)用程序、打包Android應(yīng)用程序等等[15]。在Eclipse環(huán)境下,一個典型的Android工程包括以下幾個目錄和文件:⑴Src/該目錄下存放的是Android應(yīng)用的源文件,都是用java語言編寫成的。⑵Gen/該目錄下存放的系統(tǒng)自動生成的文件。其中最核心的文件就是R.java。R.java10 第二章關(guān)鍵技術(shù)介紹文件是由appt工具根據(jù)應(yīng)用的資源文件自動生成的,換句話說R.java就是Android應(yīng)用中的資源字典。需要注意的是,R.java不可以刪除,即使被刪除了系統(tǒng)也會自動生成。⑶AndroidX.X/該目錄下存放的是AndroidSDK。這是Android應(yīng)用的程序開發(fā)包,其中提供了Android系統(tǒng)開放的所有API。根據(jù)用戶設(shè)定的不同,該目錄下SDK的版本號也不盡相同。⑷Bin/該目錄下存放生成的目標(biāo)文件,比如java二進(jìn)制文件、資源打包文件、Dalvik虛擬機(jī)的可執(zhí)行文件(.dex后綴)。⑸Libs/該目錄存放用戶導(dǎo)入的第三方j(luò)ar包。⑹Res/Res目錄下存放了Android應(yīng)用的所有資源,包括圖片資源、顏色資源、字符串資源、尺寸資源等等。按照Android的規(guī)定,不同的資源都會放在不同的目錄中,比如字符串資源就放在/res/valie/string.xml中⑺AndroidManifest.xmlAndroidManifest.xml文件是每個Android工程必備的,這是一個安卓應(yīng)用的全局描述文件。AndroidManifest.xml文件中制定了應(yīng)用的名稱、圖標(biāo)、包含的組件、應(yīng)用程序兼容的最低版本、以及要獲得的權(quán)限2.4Quartz作業(yè)調(diào)度框架Quartz是一種由JAVA寫成的開源系統(tǒng)框架。應(yīng)用該項(xiàng)技術(shù)我們可以為一項(xiàng)作業(yè)創(chuàng)建或者簡單或者復(fù)雜的調(diào)度,提高開發(fā)效率。在系統(tǒng)的開發(fā)過程中,我們可能需要周期性地執(zhí)行一些任務(wù),或者定時(shí)執(zhí)行某些任務(wù),這時(shí)我們就需要借助Quartz技術(shù)了[27,28]。2.4.1Quartz存儲作業(yè)方式Quartz是一種開源的任務(wù)調(diào)度框架,它簡單易用,支持?jǐn)?shù)據(jù)庫、CoreLike表達(dá)式、插件機(jī)制等等[29]。通過使用Core表達(dá)式,我們可以實(shí)現(xiàn)各種復(fù)雜的任務(wù)調(diào)度。Quartz主要支持兩種存儲方式:(1)JDBC類型的存儲。JDBC指的是Java數(shù)據(jù)庫連接,它是一種專門負(fù)責(zé)連11 電子科技大學(xué)碩士學(xué)位論文接并操作數(shù)據(jù)庫的標(biāo)準(zhǔn)。使用該方式是需要安裝特定的JDBC驅(qū)動程序和后臺數(shù)據(jù)庫。(2)RAMJobStore機(jī)制。這是一種性能極好、易于使用配置的調(diào)度機(jī)制,從字面意思我們就可以看出,它將調(diào)度信息保存在內(nèi)存中。但缺點(diǎn)就是當(dāng)機(jī)器重新啟動的時(shí)候所有的調(diào)度信息都會丟失。一些項(xiàng)目信息的丟失可能無所謂,但是對某些特定項(xiàng)目而言無疑是一場災(zāi)難。2.4.2Quartz觸發(fā)器Quartz框架中定于了觸發(fā)器機(jī)制和觸發(fā)器類型,在該觸發(fā)器機(jī)制下作業(yè)和對作業(yè)的調(diào)度是可以分離的,而作業(yè)被調(diào)度的時(shí)間點(diǎn)是由觸發(fā)器決定的。常用的觸發(fā)器有以下兩種類型:1)CronTrigger。該觸發(fā)器是為復(fù)雜的任務(wù)調(diào)度設(shè)計(jì)的。如果我們要在某月的一號和七號執(zhí)行某個人物作業(yè),我們就應(yīng)該選用這種觸發(fā)器。Cron表達(dá)式由一串字符串構(gòu)成,實(shí)際上它由六個子字符串組成,子字符串之間由空格隔開,從左到右分別代表:秒、分鐘、小時(shí)、一月中的幾號、月份、一月中的第幾周。字符串“6511?*SUN”是一個完整的Cron表達(dá)式的例子,它所表達(dá)的意思是:每個星期天早晨11:56。2)SimpleTrigger。從字面意思我們就可以知道這是一種對應(yīng)于簡單任務(wù)調(diào)度的觸發(fā)器。如果我們需要一個任務(wù)在一個固定的時(shí)間點(diǎn)執(zhí)行的話就選用這種觸發(fā)器,它非常類似與Java語言中的Timer(定時(shí)器)。2.4.3Quartz調(diào)度器調(diào)度器是Quartz框架的核心,它借助于Quartz框架中的一些重要組件管理Quartz的運(yùn)行時(shí)環(huán)境。Quartz的架構(gòu)是一種基于多線程的架構(gòu),在該框架啟動的時(shí)候,它會初始化一系列的worker線程,這些線程主要被調(diào)度器調(diào)用來執(zhí)行預(yù)設(shè)好的任務(wù)。這就是Quartz能夠并行執(zhí)行多個任務(wù)的基本原理。另外需要注意的是,Quartz通過一套低耦合的線程池來管理自己的線程環(huán)境,Quartz中的每個對象都是可以定制或者配置的。在Quartz框架中調(diào)度器可以關(guān)聯(lián)一個具體的任務(wù)和一種觸發(fā)器。一個觸發(fā)器可以綁定多個任務(wù),那么當(dāng)該觸發(fā)器被激活時(shí),與之綁定的所有任務(wù)都將被調(diào)度;一個任務(wù)可以綁定多個觸發(fā)器,每一個觸發(fā)器激活的時(shí)候,該任務(wù)都將被調(diào)度[30]。12 第二章關(guān)鍵技術(shù)介紹2.4.4Quartz在本系統(tǒng)中的應(yīng)用在系統(tǒng)的正常運(yùn)行中,隨時(shí)會面臨庫存的更新事件,比如有新的商品上架了或者舊的商品下市了,因此優(yōu)秀的調(diào)度機(jī)制是非常重要的。Quartz框架恰好為我們提供了良好的調(diào)度接口,可以顯著提高程序的開發(fā)效率。項(xiàng)目中使用了RoundFacMessage類封裝了Quartz框架提供的接口,在該類中定義了一種叫做TimeSync的方法。之后實(shí)現(xiàn)一個SimpleTrigger觸發(fā)器,并將這個觸發(fā)器和TimeSync方法關(guān)聯(lián)起來,這樣就可以在我們期望的時(shí)間點(diǎn)更新數(shù)據(jù)庫中的內(nèi)容。2.5SSH架構(gòu)簡介SSH框架在Web應(yīng)用開發(fā)中是一種非常受歡迎的架構(gòu),它主要由“struts”“spring”“hibernate”構(gòu)成,能夠幫助開發(fā)人員在短時(shí)間內(nèi)開發(fā)出結(jié)構(gòu)健壯、重用性強(qiáng)、方便后期維護(hù)的Web應(yīng)用。從功能的角度我們可以將SSH分成三層:表示層、業(yè)務(wù)邏輯層、和數(shù)據(jù)持久層[30]。2.5.1SSH框架模型SSH框架中,“spring”負(fù)責(zé)整個系統(tǒng)的底層架構(gòu),它主要負(fù)責(zé)MVC模型結(jié)構(gòu)分離,控制業(yè)務(wù)調(diào)用流程;“hibernate”框架實(shí)現(xiàn)了對JDBC的輕量級封裝,提供了對持久層的支持;“struts”負(fù)責(zé)總體的管理。采用SSH框架后,徹底實(shí)現(xiàn)了業(yè)務(wù)邏輯層和持久層的分離,無論前端怎樣變化,都不會對模型造成影響,數(shù)據(jù)庫結(jié)構(gòu)的改變也不會影響到前端[30]。SSH框架模型如圖2-5所示:2.5.2數(shù)據(jù)訪問對象技術(shù)(DAO)DAO的全稱是“DataAccessObject”,從字面意思就可以看出它是用來負(fù)責(zé)業(yè)務(wù)邏輯層和數(shù)據(jù)庫數(shù)據(jù)之間通信的。使用DAO的最大目的就是實(shí)現(xiàn)業(yè)務(wù)邏輯層和持久層之間的徹底解耦合。為了保持程序的健壯性,我們必須將所有對數(shù)據(jù)庫的操作抽象到一個公用API中。換句話說就是必須構(gòu)建一個類,這個類中包含了所有處理數(shù)據(jù)的方法,任何對數(shù)據(jù)庫的操作都必須通過這個類。在本系統(tǒng)中我們利用Hibernate框架實(shí)現(xiàn)了一個DAO的子類,并將所有處理數(shù)據(jù)的方法都抽象到這個子類里面。系統(tǒng)中一開始只是聲明一個DAO對象,只有在具體使用的時(shí)候才會利用Spring的自動注入功能,實(shí)例化一個具體的DAO對象供別的對象調(diào)用。13 電子科技大學(xué)碩士學(xué)位論文圖2-5SSH架構(gòu)結(jié)構(gòu)圖2.6本章小結(jié)本章介紹了Java語言的特點(diǎn)、網(wǎng)上商城系統(tǒng)使用的架構(gòu)、Quartz開源框架、輕量高效的SSH框架和Android系統(tǒng)相關(guān)的內(nèi)容。為接下來的系統(tǒng)需求分析程序開發(fā)奠定基礎(chǔ)。14 第三章系統(tǒng)需求分析第三章系統(tǒng)需求分析隨著手機(jī)上網(wǎng)用戶數(shù)量的激增、智能手機(jī)平板電腦的普及、無線上網(wǎng)速度的提升、上網(wǎng)資費(fèi)的下降,借助手機(jī)進(jìn)行網(wǎng)上購物成為一種必然的趨勢。目前,國內(nèi)的各大電子商務(wù)網(wǎng)站(淘寶、京東、凡客等等)均針對自己商務(wù)網(wǎng)站的特點(diǎn),推出了自己對應(yīng)的手機(jī)客戶端軟件。在這樣一個大的背景下,作者也嘗試在安卓平臺上實(shí)現(xiàn)這種類型的手機(jī)網(wǎng)上購物系統(tǒng)。該購物系統(tǒng)的業(yè)務(wù)邏輯一共分為七部分,用戶登陸模塊、用戶注冊模塊、商品展示模塊、促銷快報(bào)模塊、購物車模塊、訂單模塊、其他功能模塊。3.1系統(tǒng)基本流程簡介用戶打開應(yīng)用程序進(jìn)入系統(tǒng)首頁,系統(tǒng)首頁主要分為兩部分:一是新上架商品的信息,二是促銷商品的信息。用戶點(diǎn)擊對應(yīng)的區(qū)域進(jìn)入相對應(yīng)商品的列表界面。每個界面下面有商品分類標(biāo)簽,點(diǎn)擊標(biāo)簽就會進(jìn)入一個tab頁面。在該tab頁面中用戶可以查看商品的具體信息,將感興趣的商品加入收藏夾,將想要購買的商品加入購物車,進(jìn)入結(jié)算中心提交商品訂單、完成支付。該流程的示意圖如圖3-1所示:3.2業(yè)務(wù)模塊需求分析在該小節(jié)中將結(jié)合客戶端角度的系統(tǒng)用例圖描述七個重要模塊的具體功能。這七個功能模塊分別是:用戶登陸模塊、用戶注冊模塊、商品展示模塊、促銷快報(bào)模塊、購物車模塊、訂單模塊、其他功能模塊。在本節(jié)接下來的部分中將詳細(xì)介紹這七個功能模塊的需求分析信息。手機(jī)購物應(yīng)用程序客戶端系統(tǒng)的用例圖如圖3-2所示。3.2.1注冊登錄模塊需求分析注冊模塊。該模塊規(guī)定了賬號的格式、密碼的格式和長度。賬號格式為一個已經(jīng)注冊的有效地址,如果用戶輸入的郵箱地址格式錯誤,系統(tǒng)要彈出錯誤提示信息。密碼由數(shù)字、英文字母構(gòu)成,長度為8-16位,在用戶進(jìn)行注冊的時(shí)候,應(yīng)該讓用戶輸入兩次密碼,并確保兩次輸入的密碼一致,用戶注冊賬號成功后會自動登錄并跳到系統(tǒng)首頁。登錄模塊。用戶填寫的賬號、密碼信息在通過服務(wù)器端的驗(yàn)證后才可以成功登15 電子科技大學(xué)碩士學(xué)位論文錄,系統(tǒng)能夠彈出用戶賬號或者密碼錯誤的提示信息。用戶登錄成功后會進(jìn)入系統(tǒng)首頁,登錄失敗后還停留在在登錄界面用戶可以點(diǎn)擊取消按鈕跳到系統(tǒng)首頁。首頁分類瀏覽結(jié)算孕媽專區(qū)嬰幼食品寶寶用品玩具童車商品促銷加入購物車商品列表商品二級三級目錄商品界面(包括文字和圖片描述)寢具服飾圖3-1購物流程示意圖客戶端軟件用戶圖3-2系統(tǒng)用例圖16 第三章系統(tǒng)需求分析3.2.2商品信息展示模塊需求分析商品信息模塊主要由四部分構(gòu)成,分別是:商品分類、商品簡略信息展示、商品詳細(xì)信息展示、商品列表項(xiàng)展示。商品分類。商品分類包括一級分類、二級分類、三級分類。一級分類包括孕媽專區(qū)、嬰幼食品、寶寶用品、玩具童車、寢具服飾。二級分類在一級分類的基礎(chǔ)上對商品種類進(jìn)行了更細(xì)粒度的劃分。三級分類在二級分類的基礎(chǔ)上跟進(jìn)一步地進(jìn)行劃分。用戶通過點(diǎn)擊三級目錄中對應(yīng)的商品種類就可以進(jìn)入顯示商品信息的界面。商品列表。根據(jù)用戶選擇的不同排序方式,商品將按照對應(yīng)的方式顯示。這四種排序方式分別是:商品銷量排序、價(jià)格高低排序、好評度排序、上架時(shí)間排序。商品銷量的排序?qū)凑找唁N售商品數(shù)量的多少排序;價(jià)格高低排序就是按照商品價(jià)格的高低來排序;好評度排序就是按照一件商品累積的好評度信息進(jìn)行排序;上架時(shí)間排序就是按照商品上架的時(shí)間先后來進(jìn)行排序。商品簡略信息展示。商品簡略信息展示界面顯示“商品名稱、商品價(jià)格、商品圖片”三種類型的信息。用戶在點(diǎn)擊商品圖片對應(yīng)的區(qū)域之后就可以進(jìn)入顯示商品詳細(xì)信息的界面。商品詳細(xì)信息展示。在商品詳細(xì)信息展示界面顯示“商品名稱、商品圖片、商品庫存數(shù)量、商品可選顏色、商品尺碼、商品評分”六種信息和“加入購物車、收藏兩個按鈕”。用戶點(diǎn)擊“加入收藏夾”按鈕之后,如果用戶還沒有登錄系統(tǒng)則系統(tǒng)會自動跳轉(zhuǎn)到用戶登錄界面,用戶登錄成功以后系統(tǒng)會再次自動跳轉(zhuǎn)到當(dāng)前商品詳細(xì)信息界面,并提示用戶添加收藏夾成功。一件商品可以多次被添加到收藏夾,但是收藏夾中只留有一份記錄。用戶點(diǎn)擊加入購物車按鈕之后,購物車中的商品數(shù)量會加一,一件商品可以多次加入到購物車中。3.2.3促銷快報(bào)模塊需求分析促銷快報(bào)模塊主要由兩部分構(gòu)成:促銷商品信息展示和促銷商品信息列表。這兩部分都是在系統(tǒng)的首界面顯示的,這樣在用戶開啟應(yīng)用程序后就可以第一時(shí)間看到它。促銷商品的信息包括兩部分:商品的信息和商品的圖片。因?yàn)榇黉N商品信息會展示在應(yīng)用的首頁上,促銷商品對應(yīng)的圖片只能有五個。用戶可以左右滑動手指來切換這些圖片。當(dāng)用戶點(diǎn)擊這些圖片之后就可以進(jìn)入到對應(yīng)的商品促銷信息界面。這些促銷信息以列表的形式顯示,用戶點(diǎn)擊對應(yīng)的列表之后就可以看到相應(yīng)商品的具體信息。17 電子科技大學(xué)碩士學(xué)位論文3.2.4購物車模塊需求分析購物車模塊必須實(shí)現(xiàn)以下三種功能:將商品添加至購物車、管理購物車中的商品、購物車中的商品信息展示。對應(yīng)的用例圖如圖3-3所示。購物車模塊登錄用戶客戶端軟件用戶圖3-3購物車模塊用例圖商品添加至購物車。用戶在已經(jīng)登錄的情況下,點(diǎn)擊商品界面的添加至購物車按鈕就可以把喜歡的商品成功添加至購物車。購物車中的商品信息展示。用戶可以在購物車中瀏覽已選商品的各項(xiàng)信息。這些信息包括:商品總量、總體的金額(不包含運(yùn)費(fèi)的情況下)、商品所能累積的積分、對應(yīng)商品的具體信息、商品對用的優(yōu)惠信息、最后訂單支付時(shí)的實(shí)際金額。用戶可以通過單擊商品信息瀏覽界面的“加入購物車”按鈕進(jìn)入購物車商品信息展示界面。管理購物車中的商品。管理購物車中商品的界面跟購物車中的商品信息展示界面類似。二者的區(qū)別就是在管理購物車中的商品的界面中,商品的數(shù)量是可編輯的。用戶可以增加或者減少已選商品的數(shù)量。而在購物車中的商品信息展示界面中,商品的數(shù)量和信息都是固定的,用戶只能瀏覽而不能夠編輯。3.2.5訂單模塊需求分析訂單模塊要實(shí)現(xiàn)“送貨時(shí)間選擇、送貨地址選擇、支付方式選擇、訂單提交、18 第三章系統(tǒng)需求分析訂單支付”五個核心子模塊。訂單模塊這部分內(nèi)容是整個系統(tǒng)的一個核心部分,直接影響到系統(tǒng)開發(fā)的成敗。訂單支付子模塊要處理顯示“訂單金額、配送時(shí)間、送貨地址、支付方式、發(fā)票信息、用戶留言、代金卷使用”等。用戶必須通過點(diǎn)擊購物車界面中的“去結(jié)算”按鈕才可以進(jìn)入訂單支付界面。送貨地址選擇。送貨地址子模塊要保留用戶填寫的地址信息。并且可以保留用戶地址信息的歷史記錄。使得用戶提交訂單的時(shí)候不用再次填寫訂單信息。送貨時(shí)間選擇。用戶可以選擇送貨的時(shí)間,包括工作日、周末、送貨時(shí)間不限等等。支付方式選擇。通過該模塊用戶可以選擇自己期望的支付方式。例如:貨到付快、各種電子銀行、網(wǎng)銀、支付寶等等。訂單提交。用戶點(diǎn)擊結(jié)算中心的按鈕就可以提交訂單。訂單提交成功后用戶就可以收到由“訂單號、支付金額提示、可能配送的時(shí)間”三條信息組成的提示框。訂單支付。在用戶成功完成支付后,系統(tǒng)會自動跳轉(zhuǎn)到購物車界面,并提示支付成功。3.3本章小結(jié)在本章中簡述了用戶在一次購物流程中所涉及到的系統(tǒng)功能模塊,并根據(jù)系統(tǒng)功能用例圖簡要介紹了注冊登錄模塊、商品信息展示模塊、促銷商品信息模塊、購物車模塊、訂單模塊五個核心模塊。為接下來的源碼開發(fā)提供支持打好基礎(chǔ)。19 電子科技大學(xué)碩士學(xué)位論文第四章系統(tǒng)設(shè)計(jì)根據(jù)第三章中完成的系統(tǒng)需求分析的結(jié)果,本章將詳細(xì)介紹系統(tǒng)的整體架構(gòu)、客戶端服務(wù)器之間的通信設(shè)計(jì)、業(yè)務(wù)層設(shè)計(jì)、持久層設(shè)計(jì),一共四部分。從手機(jī)購物系統(tǒng)全局的角度劃分,系統(tǒng)主要分為兩部分:客戶端和服務(wù)器。客戶端指的是Android系統(tǒng)平臺上的應(yīng)用程序。服務(wù)器主要是指由J2EE服務(wù)器、Web服務(wù)器和數(shù)據(jù)庫構(gòu)成的服務(wù)端。該系統(tǒng)總體框架的示意圖如圖4-1所示。圖4-1系統(tǒng)總體框架圖從功能的角度,將系統(tǒng)劃分為四層:視圖層(View)、數(shù)據(jù)通信層、業(yè)務(wù)層、持久層。這種分層設(shè)計(jì)的思想可以帶來如下好處:各層與各層之間相互獨(dú)立,下一層的改變對上一層是透明的,可以有效降低系統(tǒng)中間各個模塊之間的耦合度,強(qiáng)化了系統(tǒng)的可擴(kuò)展性,提高了系統(tǒng)的可維護(hù)性。視圖層代表的是Android應(yīng)用程序?qū)用?,該層主要處理用戶的請求,將具有良好用戶體驗(yàn)的界面展示給用戶。數(shù)據(jù)通信層是視圖層和邏輯層之間的夾層,負(fù)責(zé)視圖層和邏輯層之間的通信,建立Socket連接、接受發(fā)送數(shù)據(jù)、解析數(shù)據(jù)等等。業(yè)務(wù)層代表的是J2EE服務(wù)器,它接受來自視圖層的請求,基于Struts這一開源框架,對相應(yīng)的業(yè)務(wù)進(jìn)行處理。持久層對應(yīng)的是數(shù)據(jù)庫服務(wù)器,利用面向?qū)ο蟮乃枷?,基于Hibernate框架實(shí)現(xiàn)對數(shù)據(jù)的持久化處理。20 第四章系統(tǒng)設(shè)計(jì)4.1客戶端和服務(wù)器之間的通信設(shè)計(jì)本系統(tǒng)的總體架構(gòu)是基于經(jīng)典的服務(wù)器-客戶端模式(C/S架構(gòu))的。系統(tǒng)中所有的業(yè)務(wù)都是由客戶端發(fā)起,服務(wù)端捕獲并回應(yīng)的。因此設(shè)計(jì)一種客戶端和服務(wù)器之間的高效通信方式就顯得尤為重要。4.1.1連接方式的設(shè)計(jì)本系統(tǒng)中所有跟網(wǎng)絡(luò)相關(guān)的操作都依賴于http協(xié)議,雖然jdk中的net包已經(jīng)封裝了訪問http協(xié)議的基本操作,但功能還是不夠豐富不夠靈活。因此借助Httpclient工具包,利用該工具包中提供的豐富、高效的API可以快速開發(fā)出一個網(wǎng)絡(luò)客戶端程序,方便地發(fā)起客戶端網(wǎng)絡(luò)連接。本系統(tǒng)通信模式的設(shè)計(jì)方案如下:客戶端捕獲用戶出發(fā)的各種事件,客戶端向服務(wù)器的特定端口發(fā)起連接請求,連接建立,客戶端向服務(wù)端發(fā)送數(shù)據(jù),服務(wù)端收取解析客戶端發(fā)來的數(shù)據(jù),根據(jù)解析出來的結(jié)果調(diào)用相應(yīng)的業(yè)務(wù)邏輯模塊,獲得業(yè)務(wù)邏輯模塊返回的數(shù)據(jù),服務(wù)端封裝數(shù)據(jù)并發(fā)送至客戶端,客戶端接受服務(wù)端發(fā)送的數(shù)據(jù),解析服務(wù)端發(fā)回的數(shù)據(jù)。4.1.2客戶端服務(wù)器之間的數(shù)據(jù)處理本系統(tǒng)選用JSON作為客戶端和服務(wù)器之間的通信格式。JSON的英文全拼是JavaScriptObjectNotation,它是一種輕量級的數(shù)據(jù)通訊方式,發(fā)源于JavaScript。JSON采用完全獨(dú)立于任何語言的數(shù)據(jù)格式,但保留了C系計(jì)算機(jī)語言的一些語法習(xí)慣,因此很容易被人理解運(yùn)用,也有利于機(jī)器的解析。對象和數(shù)組是JSON中的兩種基本數(shù)據(jù)結(jié)構(gòu),對象指的是由{}括起來的內(nèi)容,結(jié)構(gòu)為{key.Value…},其中Key表示的是對象的屬性,Value表示的是該屬性的屬性值;數(shù)組指的是由[]括起來的內(nèi)容,結(jié)構(gòu)為[“Android”,”Java”,…],跟C語言中的數(shù)組定義方式幾乎一樣,可以包含數(shù)字、字符串、對象等等。之所以沒有選擇XML數(shù)據(jù)格式是因?yàn)閄ML數(shù)據(jù)格式會導(dǎo)致數(shù)據(jù)量過大(各種標(biāo)示符),解析XML文件付付出較大的性能開銷。為了避免出現(xiàn)中文數(shù)據(jù)傳遞過程中出現(xiàn)中文亂碼的情形,服務(wù)器和客戶端的所有程序都使用UTF-8標(biāo)準(zhǔn)作為編碼標(biāo)準(zhǔn)。接下來說明一些數(shù)據(jù)的發(fā)送和解析過程??蛻舳藢?shù)據(jù)寫入一個JSON對象中,之后將該對象轉(zhuǎn)化為字節(jié)流借助Http協(xié)議將之發(fā)送到服務(wù)器端。服務(wù)器接收到該字節(jié)流之后,將它轉(zhuǎn)換成字符流,之后再將之轉(zhuǎn)換成JSON對象,之后服務(wù)器按照客戶端和服務(wù)器之間的通信協(xié)議中規(guī)定的接口,解析出關(guān)鍵參數(shù),再按參數(shù)調(diào)用相應(yīng)的業(yè)務(wù)邏輯模塊。21 電子科技大學(xué)碩士學(xué)位論文4.2業(yè)務(wù)邏輯設(shè)計(jì)業(yè)務(wù)邏輯設(shè)計(jì)的是否合理直接關(guān)系到系統(tǒng)的開發(fā)是否成功,并為后期的代碼維護(hù)和修改減輕很大負(fù)擔(dān),在本小節(jié)中主要介紹業(yè)務(wù)模塊需求分析所提出的功能模塊對應(yīng)的業(yè)務(wù)邏輯。4.2.1登錄注冊模塊業(yè)務(wù)邏輯注冊模塊業(yè)務(wù)邏輯主要描述了用戶從客戶端向服務(wù)器注冊個人信息的過程。該業(yè)務(wù)邏輯的具體描述如下:用戶在客戶端發(fā)起用戶注冊事件,之后客戶端程序?qū)⒂脩舻馁~號、密碼信息發(fā)送至中間件服務(wù)器。中間件服務(wù)器將這些信息保留在本地并轉(zhuǎn)發(fā)至位于最后臺的賬號管理服務(wù)器。如果在賬號管理服務(wù)器注冊信息成功,則返回注冊成功信息,中間件服務(wù)器會在本地將該賬號、密碼信息插入至自己的數(shù)據(jù)庫,并初始化該賬號對應(yīng)的信息;如果返回注冊失敗的信息,則提示用戶重新輸入賬號密碼信息,注冊模塊對應(yīng)的業(yè)務(wù)邏輯圖如圖4-2所示。開始向中間件服務(wù)器返回結(jié)果是否成功是獲取用戶信息注冊界面(觸發(fā)注冊事件)后臺服務(wù)器端中間件服務(wù)器保存用戶信息否向中間件服務(wù)器發(fā)送HTTP請求向后臺服務(wù)器發(fā)送HTTP請求向視圖層發(fā)送失敗信息向視圖層發(fā)送成功信息中間件服務(wù)器保存注冊信息結(jié)束圖4-2注冊模塊流程圖賬號模塊業(yè)務(wù)邏輯主頁負(fù)責(zé)用戶賬號的登錄和登出。用戶可以通過點(diǎn)擊屏幕下方菜單中的“更多”選項(xiàng),進(jìn)入賬號管理界面。賬號管理界面主要負(fù)責(zé)顯示用戶的賬號信息、昵稱信息、賬戶積分、賬戶等級等等。系統(tǒng)也提供了“退出登錄”選項(xiàng)。用戶可以點(diǎn)擊退出登錄按鈕退出登錄狀態(tài)。因?yàn)橘~號管理的業(yè)務(wù)邏輯非常簡單,在這里就不給出賬號管理業(yè)務(wù)邏輯的流程圖了。登錄模塊業(yè)務(wù)邏輯主要實(shí)現(xiàn)了用戶從客戶端登錄服務(wù)器的過程。該業(yè)務(wù)邏輯的具體描述如下:用戶在客戶端觸發(fā)用戶登錄事件,之后客戶端程序?qū)⒂脩舻馁~號、密碼信息發(fā)送至中間件服務(wù)器,之后中間件服務(wù)器再將用戶的賬號、密碼信息發(fā)22 第四章系統(tǒng)設(shè)計(jì)送至位于最后端的賬號管理服務(wù)器,賬號管理服務(wù)器檢索自己維護(hù)的數(shù)據(jù)庫,如果沒有查詢到該賬號、密碼所對應(yīng)的記錄則向中間件服務(wù)器返回錯誤提示信息,之后中間件服務(wù)器再將這一信息返回至客戶端,并提示用戶再次輸入正確的賬戶、密碼信息;如果賬號管理服務(wù)器返回的是正確的結(jié)果,中間件服務(wù)器會檢索自己在本地是否已經(jīng)存在該賬號所對應(yīng)的一系列用戶信息,如果已存在則更新相應(yīng)的本地用戶信息,如果不存在則在本地插入一條新的用戶信息。登錄模塊對應(yīng)的業(yè)務(wù)邏輯如圖4-3所示。是開始注冊新用戶更新數(shù)據(jù)庫驗(yàn)證用戶賬號、密碼信息是否正確查詢數(shù)據(jù)庫是否存此信息(中間件服務(wù)器)否中間件服務(wù)器從后臺服務(wù)器獲取用戶信息登陸界面是否查詢本地是否存在此用戶信息向中間件服務(wù)器發(fā)送HTTP請求后臺服務(wù)器否向視圖層發(fā)送失敗信息添加用戶信息是向后臺服務(wù)器發(fā)送HTTP請求向視圖層發(fā)送成功信息中間件服務(wù)器結(jié)束更新用戶信息圖4-3登錄模塊流程圖4.2.2商品信息模塊業(yè)務(wù)邏輯該業(yè)務(wù)邏輯主要負(fù)責(zé)向用戶展示商品的具體信息。用戶進(jìn)入手機(jī)端的應(yīng)用程序以后,在每個頁面下面都有一個“分類”標(biāo)簽。用戶用手指點(diǎn)擊該分類標(biāo)簽就可以進(jìn)入商品信息的分類顯示界面。在商品信息的分類顯示界面中有“孕媽專區(qū)”,“嬰幼食品”,“寶寶用品”,“玩具童車”,“寢具服飾”共五種標(biāo)簽。商品分類包括一級分類、二級分類、三級分類。二級分類和三級分類都分別在之前分類的基礎(chǔ)上對商品種類進(jìn)行了更細(xì)致的劃分。每種標(biāo)簽都代表一類特定的商品信息。用戶點(diǎn)擊“孕媽專區(qū)”標(biāo)簽就可以跳轉(zhuǎn)到該大類別商品的分類列表(二級分類),在二級分類中點(diǎn)擊具體分類項(xiàng)就可以跳轉(zhuǎn)至三級商品分類列表,之后點(diǎn)擊三類分類列表項(xiàng)就可以跳轉(zhuǎn)到對應(yīng)的商品信息列表,點(diǎn)擊具體商品的對應(yīng)圖片就跳轉(zhuǎn)至相信的商品信息顯示界面;用戶點(diǎn)擊“嬰幼食品”標(biāo)簽就可以跳轉(zhuǎn)到跟嬰幼食品相關(guān)的商品分類列表,之后依次點(diǎn)擊下一級商品分類項(xiàng),最終會跳轉(zhuǎn)至商品信息展示界面;用戶點(diǎn)擊“寶寶用品”標(biāo)簽就可以跳轉(zhuǎn)到跟寶寶用品相關(guān)的商品分類列表,之后依次點(diǎn)擊下一級商品分類項(xiàng),最終會跳轉(zhuǎn)至商品信息展示界面;用戶點(diǎn)擊“玩具童車”標(biāo)簽就可23 電子科技大學(xué)碩士學(xué)位論文以跳轉(zhuǎn)到跟玩具童車相關(guān)的商品分類列表,之后依次點(diǎn)擊下一級商品分類項(xiàng),最終會跳轉(zhuǎn)至商品信息展示界面;用戶點(diǎn)擊“寢具服飾”標(biāo)簽就可以跳轉(zhuǎn)到跟寢具服飾相關(guān)的商品分類列表,之后依次點(diǎn)擊下一級商品分類項(xiàng),最終會跳轉(zhuǎn)至商品信息展示界面。開始商品分類界面孕媽專區(qū)嬰幼食品寶寶用品玩具童車寢具服飾二、三商品級目錄商品列表界面銷量排序價(jià)格排序好評度排序上架時(shí)間排序商品詳情界面結(jié)束圖4-4商品信息模塊流程圖系統(tǒng)提供了四種為商品排序的方式。根據(jù)用戶選擇的不同排序方式,商品將按照對應(yīng)的方式顯示。這四種排序方式分別是:商品銷量排序、價(jià)格高低排序、好評度排序、上架時(shí)間排序。商品銷量的排序?qū)凑找唁N售商品數(shù)量的多少排序;價(jià)格高低排序就是按照商品價(jià)格的高低來排序;好評度排序就是根據(jù)一件商品積累的用戶好評信息進(jìn)行排序;上架時(shí)間排序就是按照商品上架順序來排列。商品的展示界面根據(jù)展示的信息多少也分為兩種,一種展示簡略的商品信息,一種展示詳細(xì)的商品信息。商品信息的獲取會觸發(fā)客戶端和服務(wù)器之間的交互。商品信息模塊業(yè)務(wù)邏輯具體情況如圖4-4所示。4.2.3促銷商品信息模塊業(yè)務(wù)邏輯該業(yè)務(wù)邏輯主要負(fù)責(zé)向用戶展示促銷商品的具體信息。不論用戶是否登錄了客戶端程序,促銷商品的信息都會在程序的主界面顯示。在客戶端程序中促銷商品的信息用兩種形式表現(xiàn):圖片形式、文字列表形式。用戶通過用手指單擊圖片或者相應(yīng)商品的文字信息都會進(jìn)入該商品的簡要信息展示界面。在商品的簡要信息展示界面中,主要以圖片的形式來展示商品,這些商品圖片會自動滾動并附帶動畫效果。在簡要商品界面中有一個詳細(xì)信息的按鈕。用戶點(diǎn)擊該按鈕以后就可以24 第四章系統(tǒng)設(shè)計(jì)進(jìn)入商品的詳細(xì)信息展示界面,包括商品的價(jià)格、數(shù)量、圖片等等。在商品詳細(xì)信息展示界面中用戶可以通過點(diǎn)擊加入購物車按鈕和收藏按鈕將商品收藏至自己的收藏夾和購物車。但是這項(xiàng)操作需要用戶處在已登錄的狀態(tài),如果此時(shí)用戶仍處在未登錄的狀態(tài),系統(tǒng)會自動跳轉(zhuǎn)到用戶注冊登錄界面,在用戶完成登錄之后系統(tǒng)會自動跳轉(zhuǎn)到之前的購物車或者收藏夾界面。促銷商品信息模塊業(yè)務(wù)邏輯具體情況如圖4-5所示開始登陸界面首頁入口購物車否是是否登錄是促銷圖片促銷文字收藏夾結(jié)束促銷產(chǎn)品頁商品詳情圖4-5促銷商品信息模塊流程圖4.2.4訂單模塊業(yè)務(wù)邏輯該模塊其實(shí)由兩部分構(gòu)成:訂單生成業(yè)務(wù)邏輯和訂單提交業(yè)務(wù)邏輯。訂單生成業(yè)務(wù)邏輯的具體描述如下:用戶進(jìn)入購物車頁面之后,如果購物車中的商品已經(jīng)確定,就可以點(diǎn)擊“結(jié)算”按鈕跳轉(zhuǎn)至訂單生成界面。如果用戶之前有過一次訂單成功提交的記錄,訂單生成界面會自動加載上一次訂單中的關(guān)鍵信息(收貨人信息、支付方式、送貨時(shí)間、送貨方式、和優(yōu)惠劵發(fā)票信息等等)。如果用戶是首次觸發(fā)訂單生成業(yè)務(wù)或者上次的訂單信息需要改變,用戶可以自己在對應(yīng)的文本框中填寫收貨人信息、支付方式、送貨時(shí)間、送貨方式、優(yōu)惠劵發(fā)票信息等等。在確認(rèn)無誤之后用戶就可以點(diǎn)“訂單提交”按鈕觸發(fā)訂單提交業(yè)務(wù)。在訂單提交之后用戶可以點(diǎn)擊“繼續(xù)購物”按鈕返回商品列表繼續(xù)瀏覽商品信息,也可以單擊“首頁”返回應(yīng)用程序的開始界面。訂單生成業(yè)務(wù)邏輯的具體描述見圖4-6。訂單提交業(yè)務(wù)邏輯的具體描述如下:用戶在確認(rèn)訂單信息正確無誤之后點(diǎn)擊提交訂單按鈕。客戶端程序會創(chuàng)建一個新線程,該線程會將訂單生成頁面中的訂單信息和URL地址按照規(guī)定格式組裝并發(fā)送給中間件服務(wù)器,中間件服務(wù)器收到信息之后再轉(zhuǎn)發(fā)給最后臺的電商服務(wù)器。需要注意的是客戶端轉(zhuǎn)發(fā)的服務(wù)器地址25 電子科技大學(xué)碩士學(xué)位論文提交成功開始購物車結(jié)算中心填寫收貨人選擇支付方式填寫送貨時(shí)間填寫送貨方式填寫優(yōu)惠劵、發(fā)票信息信息系統(tǒng)首頁否是否繼續(xù)購物提交失敗是訂單提交商品分類列表結(jié)束圖4-6訂單信息模塊流程圖都是設(shè)定好的、固定不變的。電商服務(wù)器在解析訂單信息之后,查詢本地服務(wù)器。如果庫存中有存貨,則向中間件服務(wù)器發(fā)送訂單提交成功信息并返回訂單號。之后中間件服務(wù)器再向客戶端轉(zhuǎn)發(fā)該信息;如果庫存不足,則向中間件服務(wù)器發(fā)送訂單提交失敗信息,之后中間件服務(wù)器再向客戶端轉(zhuǎn)發(fā)該信息。一般出現(xiàn)訂單提交失敗是因?yàn)閮煞N原因:一是網(wǎng)絡(luò)延遲過高,服務(wù)器無法及時(shí)快速地響應(yīng)、客戶端不能在規(guī)定時(shí)間內(nèi)收到服務(wù)器響應(yīng);二是因?yàn)橄M(fèi)者要購買的商品庫存不足導(dǎo)致訂單無法正常提交。訂單生成業(yè)務(wù)邏輯的具體描述見圖4-7。開始向中間件服務(wù)器發(fā)送錯誤提示碼是否有該商品否是訂單提交查詢庫存向中間件服務(wù)器發(fā)送訂單號組裝成JSON對象發(fā)送給客戶端出入U(xiǎn)RL地址、訂單信息向電商服務(wù)器發(fā)送HTTP請求訂單提交成功是是否成功客戶端訂單提交線程讀取數(shù)據(jù)流、轉(zhuǎn)換成JSON對象否向服務(wù)器發(fā)中間件服務(wù)器處送HTTP請求理對應(yīng)ACTION結(jié)束訂單提交失敗圖4-7訂單提交模塊流程圖26 第四章系統(tǒng)設(shè)計(jì)4.2.5購物車模塊業(yè)務(wù)邏輯購物車模塊的業(yè)務(wù)邏輯主要負(fù)責(zé):添加商品至購物車、編輯購物車中的商品、更新購物車中的商品信息、清空購物車。用戶在購物車中的任何操作都需要一個前提“用戶處于登錄狀態(tài)”。用戶可以用手指點(diǎn)擊位于商品詳細(xì)信息界面中的“加入購物車”按鈕將商品添加到購物車。另外用戶可以通過每個界面底部菜單上的購物車選項(xiàng)隨時(shí)隨地訪問購物車,購物車中的商品信息(比如商品數(shù)量)都是可以被編輯的。另外在用戶提交訂單之前,購物車中的信息都保留在本地,這樣會減少服務(wù)器端的業(yè)務(wù)壓力,從而提高系統(tǒng)的響應(yīng)速度。購物車模塊業(yè)務(wù)邏輯的具體描述見圖4-8。將商品加入購物車開始登陸頁面否是否登錄是結(jié)束清空購物車編輯商品數(shù)量商品分類列表添加商品所有界面購物車管理刪除商品圖4-8購物車模塊流程圖4.2.6地址管理模塊業(yè)務(wù)邏輯用戶可以通過點(diǎn)擊更多選項(xiàng)按鈕,進(jìn)入更多選項(xiàng)界面。在更多選項(xiàng)界面中點(diǎn)擊地址管理選項(xiàng)就可以進(jìn)入地址管理界面。不過進(jìn)入地址管理界面需要用戶處于已登錄的狀態(tài),如果用戶還未登錄則系統(tǒng)自動跳轉(zhuǎn)至用戶登錄界面,在用戶成功登錄系統(tǒng)以后再自動跳轉(zhuǎn)至地址管理界面。地址管理界面保存著用戶之前使用過的所有送貨地址,這些地址以列表的形式存在;地址管理界面中有添加新地址、刪除以后地址的選項(xiàng)。用戶點(diǎn)擊列表項(xiàng)中的某一個地址之后就可以進(jìn)入該地址的編輯界面。地址的編輯界面包括收貨人姓名、收貨人聯(lián)系方式、收貨人的具體住址信息等等。地址管理模塊業(yè)務(wù)邏輯圖圖4-9所示。27 電子科技大學(xué)碩士學(xué)位論文開始“更多”選項(xiàng)是否登錄登陸界面刪除地址否地址列表是是編輯地址結(jié)束添加地址是否存在地址否圖4-9購物車模塊流程圖4.2.7收藏夾管理模塊業(yè)務(wù)邏輯用戶如果想要將自己喜歡的商品添加至收藏夾,就必須處在已登錄的狀態(tài)。用戶可以通過兩種途徑進(jìn)入收藏夾界面,一是通過手指點(diǎn)擊商品詳情界面里面的收藏夾按鈕;二是通過手指點(diǎn)擊手機(jī)屏幕下方的更多選項(xiàng)菜單進(jìn)入收藏夾。已經(jīng)登錄的用戶在點(diǎn)擊收藏夾按鈕之后就可以將自己喜歡中意的商品加入自己的收藏夾內(nèi),這個過程中需要客戶端向服務(wù)器發(fā)送請求,之后服務(wù)器會將該商品信息跟用戶信息關(guān)聯(lián)起來,并將此關(guān)聯(lián)信息存入數(shù)據(jù)庫。另外,收藏夾中的商品信息都是可以編輯的。用戶進(jìn)入收藏夾之后可以通過點(diǎn)擊編輯按鈕按照自己的意愿修改商品的數(shù)量或者刪除已經(jīng)添加至收藏夾中的商品。收藏夾管理模塊業(yè)務(wù)邏輯圖如圖4-10所示。4.2.8訂單管理模塊業(yè)務(wù)邏輯訂單管理模塊要求用戶必須處在已經(jīng)登錄的狀態(tài),如果用戶未登錄則系統(tǒng)會自動跳轉(zhuǎn)至用戶登錄界面,在用戶成功登錄系統(tǒng)之后再自動跳回先前的界面。用戶可以通過手機(jī)點(diǎn)擊位于屏幕下方的更多管理按鈕進(jìn)入訂單信息管理界面。跟定訂單的狀態(tài)我們將訂單分為三類:“未簽收的訂單”、“一個月之內(nèi)的訂單”、“所有訂單”。每一種類型的訂單都按照用戶下單的時(shí)間先后進(jìn)行排序,越靠近當(dāng)前時(shí)間的訂單越靠前。在訂單的有序列表中只包含訂單的簡要信息:訂單的生成事件、訂單當(dāng)前的狀態(tài)、訂單對應(yīng)的編號、訂單預(yù)計(jì)送達(dá)的時(shí)間等等。當(dāng)用戶單擊訂單簡要信息之后就可以進(jìn)入顯示訂單詳細(xì)信息的界面,訂單的詳細(xì)信息包括收件人姓28 第四章系統(tǒng)設(shè)計(jì)名、收件人聯(lián)系方式、收件人地址、訂單的價(jià)格、訂單的編號、訂單所處的狀態(tài)等等。訂單管理模塊業(yè)務(wù)邏輯圖如圖4-11所示。開始結(jié)束“更多”選項(xiàng)商品詳情界面修改商品數(shù)量否登陸界面否是否登錄是是否登錄收藏夾是編輯收藏夾圖4-10收藏夾模塊流程圖否開始登陸界面是否登錄“更多”選項(xiàng)未送達(dá)訂單一月內(nèi)訂單全部訂單否訂單管理界面訂單詳情結(jié)束是否登錄是圖4-11訂單管理模塊流程圖4.3系統(tǒng)數(shù)據(jù)持久層設(shè)計(jì)持久層主要負(fù)責(zé)數(shù)據(jù)的持久化,也就是說將位于易失性存儲器(內(nèi)存)中的數(shù)據(jù)寫入非易失性存儲器(硬盤或SD卡)中,這一過程通常是借助各種關(guān)系型數(shù)據(jù)庫29 電子科技大學(xué)碩士學(xué)位論文來實(shí)現(xiàn)的。持久層就是專門處理數(shù)據(jù)持久化業(yè)務(wù)的一個獨(dú)立的區(qū)域?,F(xiàn)階段主要的桌面應(yīng)用程序和移動終端應(yīng)用程序都是采用面向?qū)ο蟮乃枷脒M(jìn)行開發(fā)的。面向?qū)ο髮?shù)據(jù)和算法相分離的思想大大提高了軟件的開發(fā)效率,降低了代碼維護(hù)的開銷,提高了代碼的重用性。Hibernate是一種充分利用面向?qū)ο笏枷霕?gòu)建的一個開源對象關(guān)系處理框架。Hibernate實(shí)現(xiàn)了對JDBC的輕量級封裝,完全支持JAVA語言開發(fā),面向?qū)ο笾械姆庋b、多態(tài)、繼承思想都有具體的體現(xiàn)。因此在本系統(tǒng)中,我們采用Hibernate架構(gòu)處理眾多對象之間的映射關(guān)系。通過抽象將各個模塊實(shí)體映射成為一個完整的E-R圖,具體情形如圖4-12所示。10…*1111…*1…*0...111…*111111…*11111111…*1圖4-12實(shí)體-關(guān)系映射圖4.3.1基礎(chǔ)數(shù)據(jù)模型設(shè)計(jì)在之前需求分析的基礎(chǔ)之上,使用面向?qū)ο蟮木幊趟枷胩崛〕鱿到y(tǒng)架構(gòu)中的各個對象,再將這些對象抽象成類。之后再根據(jù)具體業(yè)務(wù)的實(shí)際需要在這些類中選取需要持久化保存的類。為了更加高效的實(shí)現(xiàn)數(shù)據(jù)的持久化保存,本系統(tǒng)中設(shè)計(jì)了一個SuperClass(超類)。在這之后,所有需要持久化保存的類都需要繼承這個超類,有關(guān)該類的屬性30 第四章系統(tǒng)設(shè)計(jì)信息如表4-1所示。表4-1實(shí)體類SuperClass設(shè)計(jì)詳情類名屬性名稱idSuperClass類型數(shù)據(jù)庫表名含義StringStringDate主鍵IDname名稱createDateupdateDateenable創(chuàng)建日期更新日期DateIntegerString是否可用(0:可用,1不可用)備注memo4.3.2登錄注冊模型持久化設(shè)計(jì)在登錄注冊模塊中需要進(jìn)行持久化的類分別是UserInfor和UserReg。在UserReg中主要保存用戶注冊的賬號信息和密碼信息;UserInfor類總共包括用戶注冊的賬號信息和密碼信息以及跟用戶相關(guān)的積分信息、等級信息等等,這些信息在用戶注冊成功后都會有一個初始化的值。之所以將UserReg獨(dú)立出來是為了降低用戶登陸時(shí)給服務(wù)器造成的檢索壓力。因?yàn)閁serReg的屬性非常簡單,故不予列出。UserInfor的具體屬性信息如表4-2所示。表4-2實(shí)體UserInfo設(shè)計(jì)詳情類名UserInfor數(shù)據(jù)庫表名UserInfo屬性名稱emailpasswordlevelintegralbalance類型StringStringStringInteger含義郵箱密碼等級積分余額StringuserOrderSetfavoriteUserSetusersAddressSetSetSet用戶對應(yīng)的訂單對應(yīng)的收藏夾對應(yīng)的收貨地址4.3.3商品信息模型持久化設(shè)計(jì)商品信息模塊中一共包含四個需要持久化的實(shí)體對象,它們分別是商品、商品類型、商品對應(yīng)的圖片集、商品的庫存。在這四個實(shí)體對象中最核心也是最重要的對象就是“商品實(shí)體”,因?yàn)樵搶?shí)體對象中包含了商品的所有屬性信息以及和其他實(shí)體的對應(yīng)依賴關(guān)系。商品實(shí)體類的具體構(gòu)造情況如圖4-3所示。商品的類型用來31 電子科技大學(xué)碩士學(xué)位論文表明商品所屬的類別,通過商品的類別分類可以有效的調(diào)高客戶端程序的檢索效率,也能夠使數(shù)據(jù)庫中的數(shù)據(jù)保存的更加調(diào)理。當(dāng)用戶在手機(jī)客戶端瀏覽商品的時(shí)候,通常都是按照商品的類型有目的性的依次瀏覽,商品類型類的具體情況如表4-4所示。商品對應(yīng)的圖片集主要用來存儲跟商品相關(guān)的各類圖片,圖片能夠使讓用戶更加直觀的感受一件商品的好壞優(yōu)劣,商品在不同的頁面中會顯示出不同類型的圖片。商品的庫存用來表示商家所具有的商品的數(shù)量、商品所具有的尺碼、商品的顏色等等,商品的庫存數(shù)量直接關(guān)系到用戶是否能夠成功提交訂單。商品庫存類的具體情況如表4-5所示。類名屬性名稱originalIdproductNosexProduct類型數(shù)據(jù)庫表名Product含義String商品原始ID商品編號StringInteger商品適用性別商品狀態(tài)statusIntegermarketPricememberPricefinalPriceKeywordsseasonString市場價(jià)格String會員價(jià)格String最終價(jià)格String商品關(guān)鍵字商品適用季節(jié)上市時(shí)間StringlistingdataisRecommendimageDataInteger是否推薦String商品圖片productTypeisNewProductTypeInteger商品類型是否新品ProductRepertorySetProductImageSetSetSet商品對應(yīng)的庫存集合商品對應(yīng)的圖片集合表4-3實(shí)體Product設(shè)計(jì)詳情表4-4實(shí)體ProductType設(shè)計(jì)詳情類名ProductType數(shù)據(jù)庫表名ProductType屬性名稱類型含義32 第四章系統(tǒng)設(shè)計(jì)originalIdlevelStringString原始ID分類層次parentIdInteger上一級分類ID圖片的URL地址排序權(quán)重imageurlorderWeightproductSetStringSetSet關(guān)聯(lián)的商品集合4-5實(shí)體ProductRepertory設(shè)計(jì)詳情類名屬性名稱colorNamecolorOrdercolorRgbNameisLiveProductRepertory類型數(shù)據(jù)庫表名含義顏色名稱StringIntegerString顏色排序權(quán)重顏色RGB表示名稱是否上架IntegerIntegerStringnum商品數(shù)量size商品尺碼sizeOrderproductIdIntegerString尺碼排序權(quán)重字段關(guān)聯(lián)商品的ID4.3.4促銷商品信息模型持久化設(shè)計(jì)促銷商品信息模型的持久化設(shè)計(jì)主要處理兩個實(shí)體:促銷的商品實(shí)體和促銷活動實(shí)體。促銷商品實(shí)體的核心就是建立促銷信息和商品信息的關(guān)聯(lián)之上的,而商品信息的持久化情況在4.3.3節(jié)中有著很清楚的描述。通過查找促銷活動和促銷商品之間的聯(lián)系就能正確地在客戶端顯示促銷商品。促銷活動實(shí)體sale。該實(shí)體中主要存放跟具體商品相關(guān)聯(lián)的促銷活動信息,每一條促銷活動信息都會對應(yīng)一個促銷商品的集合。通過查找Sale實(shí)體就能夠獲知促銷活動的具體詳情。Sale實(shí)體的詳細(xì)情況如表4-6所示。33 電子科技大學(xué)碩士學(xué)位論文圖4-6實(shí)體sale設(shè)計(jì)詳情類名屬性名稱saleTitlesaleTextsaleidSale數(shù)據(jù)庫表名類型String含義促銷標(biāo)題促銷文字信息促銷信息ID排序權(quán)重圖片urlStringStringorderWeightimageurlbeginDateendDatestatusIntegerStringDate開始日期結(jié)束日期狀態(tài)DateIntegerIntegerSettype類型saleProductSet促銷商品集合促銷商品實(shí)體saleProduct。促銷商品實(shí)體中主要存放促銷活動ID和該促銷活動對應(yīng)的商品ID。手機(jī)購物系統(tǒng)通過該實(shí)體就可以查詢到促銷商品的具體信息。促銷商品實(shí)體的具體詳情如表4-7所示。表4-7實(shí)體SaleProduct設(shè)計(jì)詳情類名屬性名稱saleIdSaleProduct類型數(shù)據(jù)庫表名含義String促銷信息ID商品IDproductIdorderWeightnameStringIntegerString排序權(quán)重名稱4.3.5購物車模型持久化設(shè)計(jì)購物車模型中的商品信息都保存在客戶端一側(cè),依靠客戶端的SQlite數(shù)據(jù)可以實(shí)現(xiàn)購物車中的商品信息的存儲。除了購物車模型以外,其他的所有模型實(shí)體信息都存放在服務(wù)器端的數(shù)據(jù)庫中。因此購物車模型信息的實(shí)體化借助商品信息的實(shí)體化過程就可以簡單實(shí)現(xiàn)。該模型持久化設(shè)計(jì)的具體詳情如表4-8所示。34 第四章系統(tǒng)設(shè)計(jì)表4-8實(shí)體SaleCar設(shè)計(jì)詳情類名屬性名稱productIDnameSaleCar類型數(shù)據(jù)庫表名SaleCar含義StringStringStringStringStringStringStringIntegerString商品id商品名稱coloridsizeId商品顏色I(xiàn)D商品尺碼ID商品顏色colorsize商品尺碼price商品價(jià)格count商品數(shù)量imageurl商品圖片url地址4.3.6訂單模型持久化設(shè)計(jì)在訂單模型中涉及訂單商品實(shí)體(OrderProduct)和訂單實(shí)體(OrderForm),總共二個。訂單商品實(shí)體(OrderProduct)主要記錄跟顧客某一訂單相關(guān)聯(lián)的商品信息,主要包括商品的價(jià)格、商品的顏色、商品的數(shù)量、商品對應(yīng)的訂單號等等,其設(shè)計(jì)詳情如表4-8所示。訂單實(shí)體(OrderForm)是訂單模型持久化設(shè)計(jì)中的一個關(guān)鍵核心點(diǎn)。訂單實(shí)體詳細(xì)記錄了用戶選擇的所有信息、包括商品數(shù)量、訂單價(jià)格、送貨方式、送貨時(shí)間、支付方式、收件人具體信息等等。需要注意的是只有在客戶端收到服務(wù)器端的確認(rèn)信息以后,用戶提交的訂單才會生效。訂單實(shí)體(OrderForm)和訂單商品實(shí)體(OrderProduct)的設(shè)計(jì)詳情如表4-9、4-10所示。表4-9實(shí)體OrderForm設(shè)計(jì)詳情類名屬性名稱originalIddisPriceproductPricepriceOrderForm類型數(shù)據(jù)庫表名OrderForm含義String訂單ID折扣金額商品價(jià)格訂單價(jià)格doubledoubledoubleStringmobile收貨人手機(jī)號35 電子科技大學(xué)碩士學(xué)位論文phoneaddressStringString收貨人電話號碼收貨人地址收貨人郵政編碼支付方式zipcodeStringpaymentPaymentDatashipTypeshipTimeuserInfo送貨方式Data送貨時(shí)間String用戶信息orderNoString訂單編號checkDatesendDateOrderProductSetData確認(rèn)時(shí)間Data發(fā)貨時(shí)間Set訂單對應(yīng)的商品集合表4-10實(shí)體OrderProduct設(shè)計(jì)詳情類名屬性名稱productIDcolornamesizeOrderProduct類型數(shù)據(jù)庫表名含義商品idStringString顏色String商品尺碼商品數(shù)量商品對應(yīng)的訂單號商品價(jià)格numlongorderFormpriceorderFormString4.3.7地址管理模型持久化設(shè)計(jì)地址管理模塊主要分為Address實(shí)體和Area實(shí)體。其中Address實(shí)體中包含的屬性如下所示:用戶所在地區(qū)屬性(Area),收件人移動電話(MobilePhone),收件人固定電話(Telephone),用戶收貨地址(Address),收貨人個人信息(UserInfo),收貨人所在地區(qū)郵編(Zipcode);Area實(shí)體主要用來存儲收貨人地址信息中的省份、城市、地區(qū)這三部分的信息,Area實(shí)體中的屬性如下所示:省份(Provice)、城市(City)、地區(qū)(District)。由于Area實(shí)體的屬性內(nèi)容較為簡單因此不予列出,只給出Address實(shí)體的屬性表,如表4-11所示。36 第四章系統(tǒng)設(shè)計(jì)表4-11實(shí)體Address設(shè)計(jì)詳情類名屬性名稱AreaAddress數(shù)據(jù)庫表名Address類型Area含義收件人所在地區(qū)收件人移動電話收件人固定電話收件人信息MobilePhoneTelePhoneUserInfoZipcodeStringStringStringString收件人所在地區(qū)的郵編4.3.8收藏夾模型持久化設(shè)計(jì)收藏夾模型之中主要包含F(xiàn)avorite和FavoriteProduct兩種實(shí)體。其中Favorite實(shí)體的屬性如下所示:名稱(Name),主鍵ID(實(shí)體的唯一標(biāo)示),該實(shí)體關(guān)聯(lián)的商品信息集合(Set)、該實(shí)體關(guān)聯(lián)的用戶信息(UserInfo)。FavoriteProduct實(shí)體中存放的是Favorite實(shí)體ID和商品ID的對應(yīng)關(guān)系,系統(tǒng)可以通過該映射建立起收藏夾和商品的關(guān)聯(lián)。FavoriteProduct實(shí)體中的屬性比較簡單,不予列出,只給出Favorite實(shí)體的屬性表,如表4-12所示。表4-12實(shí)體Favorite設(shè)計(jì)詳情類名屬性名稱idFavorite類型數(shù)據(jù)庫表名含義String主鍵ID名稱nameStringSetFavoriteProductString創(chuàng)建日期更新日期UserInfo4.4本章小結(jié)本章主要介紹了手機(jī)購物系統(tǒng)的總體架構(gòu)、系統(tǒng)中客戶端和服務(wù)器之間的通信方式和通信使用的數(shù)據(jù)格式、系統(tǒng)各個模塊的業(yè)務(wù)邏輯設(shè)計(jì)和系統(tǒng)各個模塊的持久化實(shí)際,為接下來的系統(tǒng)實(shí)現(xiàn)奠定堅(jiān)實(shí)的基礎(chǔ)。37 電子科技大學(xué)碩士學(xué)位論文第五章系統(tǒng)實(shí)現(xiàn)在之前完成的系統(tǒng)需求分析和系統(tǒng)詳細(xì)設(shè)計(jì)的基礎(chǔ)上,接下來要具體實(shí)現(xiàn)客戶端和服務(wù)器之間的通信以及系統(tǒng)各個功能模塊。其中客戶端和服務(wù)器之間通信方式的設(shè)計(jì)尤為重要,因?yàn)檫@關(guān)系的系統(tǒng)的穩(wěn)定性和用戶的體驗(yàn),之后根據(jù)業(yè)務(wù)邏輯分析結(jié)果和數(shù)據(jù)持久化結(jié)果實(shí)現(xiàn)具體的模塊。5.1客戶端和服務(wù)器之間的通信在所有基于客戶端服務(wù)器架構(gòu)(C/S)的系統(tǒng)中,都是在由客戶端發(fā)起請求之后,再由服務(wù)端接受該請求處理之后再將處理結(jié)果返回給客戶端。因此客戶端和服務(wù)器之間通信方式設(shè)計(jì)的關(guān)鍵就是客戶端和服務(wù)器之間的數(shù)據(jù)接口設(shè)計(jì)。5.1.1通信連接的建立在該手機(jī)購物系統(tǒng)中客戶端和服務(wù)器之間的通信連接建立過程描述如下:客戶端主動向服務(wù)器發(fā)送一個請求,服務(wù)器接收該請求并采取相應(yīng)的動作,之后服務(wù)器將處理結(jié)果返回給客戶端。用戶在使用系統(tǒng)的過程中,在任何一個界面中的任意操作都會生成一個線程類(Thread)來響應(yīng)用戶的各種操作請求,該線程類借助RemApiImpl類和HttpUtils類向位于網(wǎng)絡(luò)另一端的軟件開發(fā)商服務(wù)器發(fā)送HTTP請求。HttpUtils類的連接建立過程比較復(fù)雜,下一段內(nèi)容中會詳細(xì)介紹。中間件服務(wù)器使用自身的方法捕獲該Http請求,之后解析用戶的具體請求,并將用戶的請求轉(zhuǎn)發(fā)給電商服務(wù)器。之前我們分析得知賬號注冊業(yè)務(wù)邏輯、訂單提交業(yè)務(wù)邏輯的成功與否都是由位于最后邊的電商服務(wù)器決定的。電商服務(wù)器根據(jù)接受到的用戶請求采取相應(yīng)的處理動作,之后將處理結(jié)果返回給中間件服務(wù)器。中間件服務(wù)器借助ServeltAction方法捕獲到電商服務(wù)器返回的數(shù)據(jù),并根據(jù)約定的數(shù)據(jù)格式將數(shù)據(jù)封裝成JSON類型的數(shù)據(jù),并將該JSON類型數(shù)據(jù)發(fā)送至客戶端。此時(shí)位于客戶端的線程類(Thread)捕獲該數(shù)據(jù),在解析完成該JSON數(shù)據(jù)之后,將相應(yīng)的數(shù)據(jù)顯示在客戶端的系統(tǒng)界面上??蛻舳讼蚍?wù)器發(fā)送請求的過程主要借助HttpUtils類,該類中能夠?qū)崿F(xiàn)該請求發(fā)送功能的方法叫做sendJSONToServer。該方法的形參有三個,第一個形參的類型是String,指代發(fā)送請求的名稱;第二個形參的類型是JSONObject,指代的是客戶端發(fā)送給服務(wù)器的具體請求;第三個形參類型是Int,指代的是請求的超時(shí)時(shí)間。該方法的業(yè)務(wù)處理流程如下:該方法首先將一個令牌環(huán)和時(shí)間戳封裝為一個38 第五章系統(tǒng)實(shí)現(xiàn)JSON對象,其中令牌環(huán)是為了防止客戶端短時(shí)間內(nèi)向客戶端大量發(fā)送重復(fù)請求,時(shí)間戳用來判斷請求是否超時(shí)。之后該方法新建一個HttpPost對象,并將之前的JSON對象設(shè)置為該HttpPost對象要發(fā)送的數(shù)據(jù)。之后新建HttpClient對象,并調(diào)用Post方法將客戶端數(shù)據(jù)發(fā)送到服務(wù)器端,并獲取HttpResponse對象。如果響應(yīng)成功,則該方法從HttpResponse對象中解析出數(shù)據(jù),并封裝成JSON對象發(fā)回至客戶端。該流程的具體步驟如圖5-1所示。獲取令牌環(huán)時(shí)間戳HttpResponse響獲取響應(yīng)數(shù)據(jù)應(yīng)對象HttpClient執(zhí)行Post方法封裝成JSON對象封裝成JSON對象新建HttpPost對象設(shè)置對象參數(shù)設(shè)置HttpPost對象新建HttpClient對傳送的數(shù)據(jù)象圖5-1sendJSONToServer()流程圖5.1.2通信數(shù)據(jù)的處理客戶端要向服務(wù)器發(fā)送請求信息的一個前提是必須知道服務(wù)器的IP地址,為此系統(tǒng)專門設(shè)置了一個類PropertyAddr,該類專門用來讀取存儲在屬性文件中的所有地址信息。另外需要提及的是屬性文件中的內(nèi)容都是鍵值對,如果要獲取想要的地址信息只需要知道對應(yīng)的鍵值即可。另外,客戶端與服務(wù)器之間要頻繁地進(jìn)行String類型數(shù)據(jù)和JSON對象的轉(zhuǎn)換。借助名為org.json的第三方Jar包,利用其中JSON對象的fromObject方法可以方便的實(shí)現(xiàn)String類型數(shù)據(jù)和JSON類型數(shù)據(jù)的轉(zhuǎn)換。服務(wù)器和客戶端之間用于獲取請求對象的方法(例如ServeltAction)都是先通過getInputStream()方法獲取輸入的字節(jié)流,之后在通過BufferReader()將字節(jié)流轉(zhuǎn)變成對應(yīng)的字符流,之后再調(diào)用java中所有對象都具有的方法toString()將該字符流轉(zhuǎn)換成String對象。5.2系統(tǒng)功能模塊的實(shí)現(xiàn)系統(tǒng)中的每項(xiàng)業(yè)務(wù)邏輯都有具體功能模塊與之相對應(yīng),而且每一項(xiàng)業(yè)務(wù)邏輯都39 電子科技大學(xué)碩士學(xué)位論文需要客戶端和服務(wù)器之間的相互配合才能完成。通常一項(xiàng)業(yè)務(wù)都是從客戶端發(fā)起,之后在服務(wù)器端處理完成后,再將處理結(jié)果返回到客戶端。在本系統(tǒng)中所有的業(yè)務(wù)都由位于客戶端的Activity發(fā)起,該Activity會新建一個Thread類專門處理跟服務(wù)器的交互業(yè)務(wù),服務(wù)器接收到客戶端的請求之后會將該請求轉(zhuǎn)交給Action類,該類再將客戶端的數(shù)據(jù)轉(zhuǎn)交給對應(yīng)的Service類處理,之后再將處理結(jié)果發(fā)送到客戶端,客戶端的Thread類接收到服務(wù)端返回的數(shù)據(jù)后再將數(shù)據(jù)顯示在對應(yīng)的Activity中。5.2.1用戶登錄注冊功能的實(shí)現(xiàn)用戶登錄注冊模塊在客戶端和服務(wù)器兩邊一共有九個類,其中位于客戶端的類有三個,分別是LoginActivity類,UserThread類,RemoteApiImpl類;位于服務(wù)器端的類一共有六個分別是:UserInfoAction類,JSONAction類,IuserRegisterService類,IuserInfoService類,UserRegisterServiceImpl類,UserInfoServiceImpl類。圖5-2顯示了用戶登錄注冊模塊對應(yīng)的類圖。下面介紹該功能模塊的開發(fā)過程。-UserRegisterServiceIUserRegisterService-UserInfoService:IUserInfoservice-propertiesUtils:PropertiesUtils-properties:Properties+register(UserInfouserInfo):void+register(UserInfouserInfo):void+getProperties():Properties+init():void+setProperties():void+register(UserInfouserInfo):void-IsUserExit(Stringname):Boolean-register(UserInfouserInfo):void-updateUserInfo(UserInfouserInfo):void-updateOrder(UserRegisteruserRegister):void-email:String-email:String-password:String-level:String-integral:Integer-balance:String-orderWeight:Integer圖5-2登錄注冊模塊類圖首先要實(shí)現(xiàn)LoginActivity類,該類用來顯示用戶注冊時(shí)的界面。用戶在點(diǎn)擊40 第五章系統(tǒng)實(shí)現(xiàn)位于登錄界面的確定按鈕之后,LoginActivity類會調(diào)用一個特定的方法生成一個Register線程,該Register線程專門負(fù)責(zé)處理用戶的注冊請求。Register線程Start之后,會調(diào)用位于RemoteApiImpl類中的userRegister方法向中間件服務(wù)器發(fā)送用戶注冊請求。中間件服務(wù)器接收到該請求之后,調(diào)用UserInfoAction類中的read方法,該方法會解析客戶端發(fā)送過來的數(shù)據(jù),也就是獲取用戶的賬戶名稱和密碼。之后中間件服務(wù)器再將包含用戶賬戶密碼信息的JSON對象發(fā)送給最后端的電商服務(wù)器。電商服務(wù)器核實(shí)該賬戶密碼信息之后會發(fā)送給中間件服務(wù)器一個值。如果返回值為0,則表明電商服務(wù)器端的注冊成功完成,之后IuserRegisterService類會調(diào)用Insert方法將從電商服務(wù)器獲取的用戶等級信息,用戶賬戶余額,用戶現(xiàn)有的積分等等插入到本地?cái)?shù)據(jù)庫;如果返回值為1,則表明注冊失敗,并將該失敗信息返回到客戶端,并在LoginActivity界面顯示。用戶注冊界面如圖5-3所示。圖5-3注冊登錄界面之后實(shí)現(xiàn)用戶登錄功能,用戶登錄時(shí)的界面也是借助LoginActivity類實(shí)現(xiàn)的。用戶在點(diǎn)擊位于登錄界面的登錄按鈕之后,LoginActivity類會調(diào)用一個特定的方法生成一個Thread線程,該Thread線程專門負(fù)責(zé)處理用戶的登錄請求。Thread線程Start之后,會調(diào)用位于RemoteApiImpl類中的userLogin方法向軟件開發(fā)商服務(wù)器發(fā)用登錄請求。軟件開發(fā)商服務(wù)器接收到該請求之后,調(diào)用UserInfoAction類中的read方法,該方法會解析客戶端發(fā)送過來的數(shù)據(jù),也就是獲取用戶的賬戶名稱和密碼。41 電子科技大學(xué)碩士學(xué)位論文之后客戶端服務(wù)器再將包含用戶賬戶密碼信息的JSON對象發(fā)送給最后端的商家服務(wù)器。商家服務(wù)器核實(shí)該賬戶密碼信息之后會發(fā)送給軟件開發(fā)商服務(wù)器一個值。需要說明的是商家服務(wù)器返回給軟甲開發(fā)商服務(wù)器的信息是String類型的,還需要借助JSONObject類中的方法將String類型的數(shù)據(jù)轉(zhuǎn)換成JSONObject,之后再從該對象中解析出需要的數(shù)據(jù)。之后IuserRegisterService類會根據(jù)解析出的數(shù)據(jù)判斷該用戶信息是否存在,如果該用戶信息存在則IuserRegisterService類會調(diào)用Update方法更新本地的UserInformation,也就是從商家服務(wù)器獲取的用戶等級信息,用戶賬戶余額,用戶現(xiàn)有的積分等等;如果該用戶信息并不存在,在會調(diào)用Register方法本地插入一條新的記錄(record),該記錄中的信息包括用戶的賬號、密碼、用戶用戶等級信息,用戶賬戶余額,用戶現(xiàn)有的積分等等。用戶注冊界面和用戶成功登陸后的界面如圖5-4所示。5-4登陸后的界面接下來給出該功能模塊中的一段典型代碼:if(userName==null||"".equals(userName)){CommonUtil.showInfoDialog(this,"用戶名不能為空");return;}if(userPwd==null||"".equals(userPwd)){CommonUtil.showInfoDialog(this,"密碼不能為空");return;42 第五章系統(tǒng)實(shí)現(xiàn)}5.2.2商品信息展示功能的實(shí)現(xiàn)商品信息展示模塊要實(shí)現(xiàn)的功能主要分為三部分:商品類別展示、商品詳細(xì)信息展示、商品簡要信息展示。其中一共涉及到七個類,三個位于服務(wù)器端,它們分別是HiActivity,RemoteApiImpl,SalesThread;四個位于客戶端,它們分別是ExpActivity,ExpThread,RemoteApiImpl,Category。我們首先實(shí)現(xiàn)類ExpActivity,該類主要負(fù)責(zé)生成商品列表顯示界面,該界面詳情如圖5-6所示。在商品列表界面中有多個分類標(biāo)簽,它們都是使用RadioButton控件制作的。在每一個RadioButton上邊都綁定了一個事件監(jiān)聽器,系統(tǒng)中存在三級分類目錄,當(dāng)用戶單擊三級分類目錄中對應(yīng)的這個控件的時(shí)候ExpActivity就會生成一個ExpThread線程。該線程主要負(fù)責(zé)向服務(wù)器發(fā)送獲取不同類別的商品信息的請求,但是真正負(fù)責(zé)商品信息獲取的類是RemoteApiImpl類。該類通過調(diào)用自身的getCatogList方法,該方法有三個形參,分別是Context,CatogeryID,level,Context主要用于傳遞程序的上下文,CatogeryId表示商品的分類號,level表示分類的級別,依照這三個參數(shù)服務(wù)器就可以調(diào)出相應(yīng)類別的商品信息。服務(wù)器端跟商品信息相關(guān)的業(yè)務(wù)都是由ProductAction類負(fù)責(zé)的,通過調(diào)用CatogeryList方法(帶入之前的三個參數(shù)),服務(wù)器端就可以獲得一個包含特定類別商品信息的數(shù)據(jù)結(jié)構(gòu)(ArrayList),之后該方法將該數(shù)據(jù)結(jié)構(gòu)封裝成JSON對象,并通過調(diào)用ProductService類中的方法將該JSON對象發(fā)回客戶端??蛻舳说木€程ExpThread捕獲到該JSON對象后,解析出其中的商品信息,并將這些商品信息顯示在ExpActivity類生成的界面上。商品詳細(xì)信息的展示和商品簡要信息的展示對應(yīng)的業(yè)務(wù)邏輯跟獲取分類商品信息的業(yè)務(wù)邏輯是完全一致的。它們之間的區(qū)別在于獲取商品相信信息調(diào)用的是ProductAction類中的getProductDetailInfo()方法,獲取商品相信信息調(diào)用的是ProductAction類中的getProductInfo()方法。另在在商品詳細(xì)信息中會包含一些顏色、價(jià)格、評價(jià)、商品對應(yīng)的積分等等信息,這些信息可能存在重復(fù)的情況,可以通過在集合Set中設(shè)置一些過濾條件予以過濾。商品列表界面的生成依賴于活動ProductArrayActivity,該界面上有四個RadioButton分別對應(yīng)一種排序的方法。在界面的生成和初始化會觸發(fā)回調(diào)函數(shù)OnCreate()的調(diào)用,該方法會為這四個RadioButton綁定一個事件監(jiān)聽器,每當(dāng)用戶點(diǎn)擊這些RadioButton時(shí),事件監(jiān)聽器會調(diào)用自身的Run方法,該方法會生成一個ProductArrayThread,專門用來向服務(wù)器發(fā)送getProductArray請求。位于服務(wù)器端的ProductAction類會根據(jù)這些請求調(diào)用自身的ProductArray方法將商品列表信43 電子科技大學(xué)碩士學(xué)位論文息封裝成JSON對象發(fā)送給客戶端,之后客戶端的ProductArrayThread線程會收到這些返回?cái)?shù)據(jù),并將這些數(shù)據(jù)顯示在ProductArrayActivity生成的界面上。ProductArrayActivity類生成的界面如圖5-5、5-6所示。圖5-5商品分類圖5-6商品列表下面給出一段該功能模塊中處理商品列表的典型代碼:publicvoidprocessData(ListparamObject,booleanparamBoolean){productInfos=paramObject;if(productInfos==null){44 第五章系統(tǒng)實(shí)現(xiàn)tv_prodlist_noresult.setVisibility(View.VISIBLE);iv_prodlist_noresult.setVisibility(View.VISIBLE);}ProductLvAdapteradapter=newProductLvAdapter(context,lv_prodlist_listprod,productInfos);lv_prodlist_listprod.setAdapter(adapter);}5.2.3促銷商品信息展示功能的實(shí)現(xiàn)要實(shí)現(xiàn)跟促銷商品信息展示功能相關(guān)的類一共有六個,這其中有三個類位于客戶端,它們分別是HiActivity,RemoteApiImpl,SalesThread;三個位于服務(wù)器端的類分別是ProductAction,ProductServiceImple,IProductService。在所有這些類里面我們首先實(shí)現(xiàn)ProductAction類,該類是核心類,負(fù)責(zé)商品信息的展示。該類中的方法如表5-1所示。表5-1ProductAction類方法方法名參數(shù)voidvoidvoidvoidvoidvoid含義getSaleInfo()saleProduct()productList()categoryList()productDetail()productShow()獲取首頁促銷產(chǎn)品獲取促銷產(chǎn)品得到商品列表得到分類列表獲得商品的詳情展示商品信息在用戶成功登錄系統(tǒng)之后,程序首先會進(jìn)入HiActivity類負(fù)責(zé)生成的促銷快報(bào)界面。該界面主要顯示一些促銷商品的簡要信息和相關(guān)圖片。HiActivity在加載以后會調(diào)用自帶的Oncreate()方法,該方法會拉起一個Thread線程。該Thread線程會向服務(wù)器發(fā)送一個有關(guān)商品信息的請求。位于服務(wù)器端的ProductAction類會捕獲該請求,該類的getSaleInfo()方法會處理該請求,通過調(diào)用Read()方法解析客戶端發(fā)送過來的請求。通過解析服務(wù)器獲得客戶端請求的促銷商品的數(shù)量、促銷商品信息等等。之后服務(wù)器調(diào)用ProductServiceImpl類中的方法將獲取到的商品信息存入一個ArrayList結(jié)構(gòu)體中,并將該結(jié)構(gòu)封裝成JSON對象發(fā)回客戶端。ProductServiceImpl接口的構(gòu)造如圖5-7所示??蛻舳私邮盏皆撔畔⒑笾匦陆馕?,之后會將促銷信息顯示在HiActivity的生成的界面上。45 電子科技大學(xué)碩士學(xué)位論文-userRegisterService:IProductService-userInfoService:IUserInfoService-propertiesUtils:PropertiesUtils-properties:Properties+register(UserInfouserinfo):void+getProperties():Properties+init():void+setProperties(Propertiesproperties):void-colorName:String-product:Product-size:String-promotionProductDao:SimpleHibernateTemplate+getPromotionProduct(Stringinfoid)():List+getSalepage(intPageSize)():List-saleId:String-imageurl:String-saleTitle:String-sale:Sale-orderWeight:Integer-productNum:String-markertPrice:String-memberPrice:String-productRepertorySet:Set圖5-7ProductServiceImpl接口詳情SaleProductActivity生成限時(shí)搶購產(chǎn)品信息界面。HiActivity生成的界面如圖5-8所示。SaleProductActivity在加載以后會調(diào)用自帶的Oncreate()方法,該方法會拉起一個SaleProductThread線程。該線程會向服務(wù)器發(fā)送一個有關(guān)商品信息的請求。位于服務(wù)器端的ProductAction類會捕獲該請求,該類的SaleProduct()方法會圖5-8限時(shí)搶購界面46 第五章系統(tǒng)實(shí)現(xiàn)處理該請求,通過調(diào)用Read()方法解析客戶端發(fā)送過來的請求。通過解析服務(wù)器獲得客戶端請求的促銷商品信息。之后服務(wù)器調(diào)用ProductServiceImpl類中的方法將獲取到的商品信息封裝成JSON對象發(fā)回客戶端??蛻舳私邮艿皆撔畔⒑笾匦陆馕?,之后會將促銷信息顯示在SaleProductActivity的生成的界面上。下面給出一段該模塊中的典型代碼:publicvoidprocessData(ListparamObject,booleanparamBoolean){bulletinInfos=paramObject;BulletinLvAdapterbulletinAdaper=NewBulletinLvAdapter(context,ll_bulletin_prom,bulletinInfos);ll_bulletin_prom.setAdapter(bulletinAdaper);}5.2.4購物車功能的實(shí)現(xiàn)購物車主要用于存放用戶瀏覽商品過程中保存的一些商品信息,這些信息全部保存在客戶端,因此購物車模塊功能的實(shí)現(xiàn)并不需要和服務(wù)器進(jìn)行交互。我們要分別實(shí)現(xiàn)購物車模塊一共包含的6個類,這些類分別是ShopDataHelper類,ShopCarActivity類,HttpComment類,RemoteApiImpl類,ShopCarProThread類,ShopCarProAdapter類。這其中最核心的類是ShopDataHelper類。該類中的方法如表5-2所示。我們首先實(shí)現(xiàn)ShopCarActivity類,購物車的界面主要由ShopCarActivity類來產(chǎn)生,在該活動類被加載的時(shí)候回調(diào)函數(shù)Oncreate()會被調(diào)用,之后該方法會拉起一個ShopCarProThread線程。購物車的主界面如圖5-9所示。在該線程的Run()方法中,會執(zhí)行ShopDataHelper類中的getProCarDetail放獲取存放在客戶端的購物車商品信息。需要注意的是,存儲在購物車中的商品信息都是可編輯的,用戶可以隨意的添加、刪減已存放的商品信息。ShopDataHelper中的DeleteShopData()方法實(shí)現(xiàn)了對商品的刪除功能,InsertShopData()方法實(shí)現(xiàn)了商品的添加功能,UpdateShopData()方法實(shí)現(xiàn)了商品信息的更新功能。如圖5-10顯示的是購物車中為空時(shí)的情形。下面給出一段該模塊的典型代碼:ShoppingCarAdapteradapter=newShoppingCarAdapter(ShoppingCarActivity.this,paramObject);shopcar_product_list.setAdapter(adapter);if(paramObject.productlist.size()>0){47 電子科技大學(xué)碩士學(xué)位論文圖5-9購物車界面圖5-10購物車為空時(shí)的界面Addupaddup=paramObject.cart_addup;shopcar_total_buycount_text_1.setText(addup.total_count+"");shopcar_total_bonus_text_1.setText(addup.total_point+"");48 第五章系統(tǒng)實(shí)現(xiàn)shopcar_total_money_text_1.setText(addup.total_price+"");}else{setContentView(R.layout.shopping_none_car_activity);}5.2.5結(jié)算模塊功能的實(shí)現(xiàn)結(jié)算業(yè)務(wù)邏輯的實(shí)現(xiàn)需要客戶端和服務(wù)器的配合,一共包含15個類,其中7個位于客戶端,分別是:OrderRemarkActivity類,OrderCarActivity類,OrderDetailActivity類,OrderSuccessActivity類,OrderDetailThread類,OrderProductDetailThread類,OrderCarThread類;8個位于服務(wù)器端,分別是:UserInfoService類,OrderService類,ProductService類,ShipTimeService類,ShipTypeService類,PropertyUtils類,UserAddressService類,OrderBackUpServicel類。表5-2ShopDataHelper類方法詳情方法名參數(shù)voidvoidvoidvoid含義InsertShopData()UpdateShopData()DeleteShopData()DeleteAllShopData()在購物車中插入一條商品信息更新購物車中的商品信息刪除購物車中的一條商品信息刪除購物車中的所有商品信息用戶只有在訂單填寫支付方式、送貨時(shí)間、貨物類型這三項(xiàng)信息以后才可以選擇向服務(wù)器發(fā)送訂單信息,并且支付方式、送貨時(shí)間、貨物類型這三項(xiàng)的候選信息需要客戶端向服務(wù)器發(fā)送請求以后才可以獲取??蛻舳送ㄟ^調(diào)用getPaymentType方法獲取支付方式信息,通過調(diào)用getShipTime方法獲取送貨時(shí)間,通過調(diào)用getProducttype方法獲取貨物的類型信息。在獲得者三類信息以后分別將他們保存在ArrayList,ArrayListArrayList數(shù)據(jù)機(jī)構(gòu)中。另外服務(wù)器的地址信息保存在屬性文件中,客戶端可以通過屬性類讀取對應(yīng)的文件來獲取服務(wù)器地址,這樣做的好處就是當(dāng)服務(wù)器的地址改變時(shí),不用修改代碼直接修改屬性文件的內(nèi)容即可。UserInfoService類用于處理用戶信息,包括用戶的姓名、聯(lián)系方式、送貨地址等等。用戶的送貨地址可以通過調(diào)用UserAddressService類中的方法從服務(wù)器端獲取,通過調(diào)用ProductService類中的方法可以獲取用戶即將購買的商品信息,這些商品信息都保存在結(jié)構(gòu)體ArrayList中。服務(wù)器端確認(rèn)訂單信息成功生成之后,會生成訂單號,并49 電子科技大學(xué)碩士學(xué)位論文將訂單信息保存在服務(wù)器端的數(shù)據(jù)庫中,訂單信息包括貨品價(jià)格、收件人姓名、收件人聯(lián)系方式、收件人地址(郵編、省份、地區(qū)、街道)等等。該訂單信息會借助Hibenate技術(shù)在服務(wù)器端實(shí)現(xiàn)持久化。如圖5-11、5-12所示。圖5-11結(jié)算中心圖5-12提交成功界面用戶在結(jié)算中心點(diǎn)擊提交訂單之后,類OrderCarActivity中的方法會產(chǎn)生一個專門處理訂單提交業(yè)務(wù)的線程OrdreCarThread。之后OrderCarThread線程根據(jù)它的生成類傳遞的Url地址和用戶填寫的訂單具體內(nèi)容,調(diào)用RemoteApiImpl類中的方法,將這些訂單的詳細(xì)信息發(fā)送至中間件服務(wù)器,中間件商服務(wù)器再借助50 第五章系統(tǒng)實(shí)現(xiàn)HttpUtil類中的postJSONObject方法將訂單信息發(fā)送至電商服務(wù)器,電商服務(wù)器端根據(jù)Struts框架規(guī)范處理客戶端發(fā)送過來的請求。具體流程就是調(diào)用服務(wù)器端的OrderAction類中的Read方法,該方法讀取客戶端發(fā)送過來的字節(jié)流,并將之轉(zhuǎn)換成字符數(shù)組,最后借助JSONobject對象中的fromObject方法將該字符數(shù)組轉(zhuǎn)換成JSON對象,從中解讀出客戶端發(fā)送過來的用戶訂單信息。如果服務(wù)器端成功生成信息,則會向中間件商服務(wù)器發(fā)送成功信息,之后該訂單信息會在中間件服務(wù)器中保存,并向客戶端轉(zhuǎn)發(fā)成功信息。如果服務(wù)器端未成功生成訂單信息,則向中間件務(wù)器發(fā)送訂單生成失敗信息,之后向客戶端轉(zhuǎn)發(fā)失敗信息。位于客戶端的OrdreCarThread線程根據(jù)收到的信息并向OrderCarActivity發(fā)送相應(yīng)的代碼,OrderCarActivity類根據(jù)代碼的不同向?qū)?yīng)的Activity跳轉(zhuǎn)。代碼的具體情況如表5-3所示。表5-3訂單提交返回碼提示碼碼值11含義MSG_NETWORK_ERRORMSG_ORDER_ERRORMSG_ORDER_SUCCESS網(wǎng)絡(luò)不正常訂單提交失敗訂單提交成功1213如果碼值為11則表明用戶處在一個比較差的網(wǎng)絡(luò)環(huán)境中,用戶會收到一個網(wǎng)絡(luò)環(huán)境不好的提示框。碼值為12表明用戶的訂單提交失敗,可能是因?yàn)樯碳胰必洝齑娌辉诘鹊仍?,之后會跳轉(zhuǎn)至相應(yīng)的界面。如果碼值為13則表明用戶訂單提交成功,之后會跳轉(zhuǎn)至OrderSuccessActivity類生成的界面中去。接下來給出該功能模塊的部分實(shí)現(xiàn)代碼。Addressaddress_info=(Address)paramObject.get("addressInfo");PaymentpaymentInfo=(Payment)paramObject.get("paymentInfo");DeliverydeliveryInfo=(Delivery)paramObject.get("deliveryInfo");InvoiceInfoinvoiceInfo=(InvoiceInfo)paramObject.get("invoiceInfo");productlistInfo=(List)paramObject.get("productlistInfo");Listcheckout=(List)paramObject.get("checkout");CheckoutAddupcheckoutAdd=(CheckoutAddup)paramObject.get("checkoutAdd");textAdress2.setText(address_info.getName()+"");textAdress3.setText(address_info.getAddress_area()+"");textAdress4.setText(address_info.getAddress_detail()+"");if(paymentInfo.getType()==1){51 電子科技大學(xué)碩士學(xué)位論文payment_payValue_text.setText("貨到付款");}elseif(paymentInfo.getType()==2){payment_payValue_text.setText("貨到POS機(jī)");}elseif(paymentInfo.getType()==3){payment_payValue_text.setText("支付寶");}5.2.6訂單模塊功能的實(shí)現(xiàn)用戶訂單管理功能的開發(fā)程描述如下。首先實(shí)現(xiàn)類OrderActivity,該類負(fù)責(zé)生成訂單列表管理界面?;顒宇怬rderActivity的OnCreate方法會調(diào)用isLogin方法判斷用戶當(dāng)前是否處于已經(jīng)登錄的狀態(tài),如果檢測到用戶未登錄則直接跳轉(zhuǎn)至用戶登錄界面;如果用戶已經(jīng)登錄則產(chǎn)生一個OrderArrayThread線程,該線程負(fù)責(zé)從客戶端向服務(wù)器申請用戶對應(yīng)的訂單信息。具體過程為:通過調(diào)用RemoteApiImpl類中的getList方法向服務(wù)器發(fā)送請求,位于服務(wù)器端的OrderAction類捕獲該請求,之后會調(diào)用OrderService方法返回處理結(jié)果。如果用戶沒有對應(yīng)的訂單信息則返回空值,否則返回訂單列表信息。類OrderInfoActivity負(fù)責(zé)產(chǎn)生訂單詳細(xì)信息的界面,該類的OnCreate方法中會拉起一個OrderInfoThread線程,該線程專門負(fù)責(zé)客戶端向服務(wù)器端請求訂單詳情信息。該線程會實(shí)例化一個RemoteApiImpl類,之后調(diào)用該類的getOrderInfo方法獲取服務(wù)器端的訂單詳情信息,位于服務(wù)器端的OrderAction類捕獲并處理這一請求,處理的具體過程為:OrderService類通過調(diào)用getOrderInfo方法獲取訂單的詳細(xì)信息并將這些信息封裝在JSON對象中,這些信息包括訂單編號、訂單價(jià)格、收貨人地址、收貨人聯(lián)系方式、送貨時(shí)間、付款方式、備注、放票信息等等;ProductService類調(diào)用getProductInfo方法獲取訂單中商品的具體信息,包括商品名稱、商品圖片、商品價(jià)格、商品數(shù)量等等。之后將訂單信息和訂單中的商品信息按照客戶端和服務(wù)器預(yù)先定義好的數(shù)據(jù)格式封裝在一個JSON對象中,并將該JSON對象發(fā)會客戶端,位于客戶端的OrderInfoThread收到該JSON對象后從中解析出訂單信息和商品信息并將之顯示在界面上。該功能模塊的部分實(shí)現(xiàn)代碼如下所示:cancelablelist=newArrayList();uncancelablelist=newArrayList();for(OrderListitem:list){if(item.getFlag()==1){52 第五章系統(tǒng)實(shí)現(xiàn)cancelablelist.add(item);Log.i(TAG,item.getFlag()+"-可取消的上-"+item.getStatus());}else{uncancelablelist.add(item);Log.i(TAG,item.getFlag()+"-不可取消的上-"+item.getStatus());}}Log.i(TAG,"cancelablelist可以取消的數(shù)目為:"+cancelablelist.size());Log.i(TAG,"uncancelablelist不可以取消的數(shù)目為:"+uncancelablelist.size());5.2.7收藏夾模塊功能的實(shí)現(xiàn)收藏夾模塊一共包含12個類,這些類之間的調(diào)用關(guān)系如圖5-13所示。通過調(diào)用FavoriteProMapAction類中的getFavoriteArray方法可以獲取已登錄用戶的收藏夾商品信息。-id:String-email:String-level:String-integral:Integer-balance:String-marketPrice:String-memberPrice:String-finalPrice:String-productDao:SimpleHibernateTemplete+getProductBean():Product-UserInfoDao:SimpleHibernateTemplete+findById:UserInfo-findById():UserInfo-favoriteservice:IFavoriteService-favoriteMapProductService:IFavoriteMapProductService-propertiesUtils:PropertiesUtils+getProductBean():Product-userInfoService-propertiesUtils:PropertiesUtils+addFavorite():void+favoritebean():Favorite+addSave():void-getFavoriteBean():void+getProperties():Properties+init():void+setProperties(Propertiesproperties):void-favoriteDao:SimpleHibernateTemplete-favoriteBean():Favorite+addFavorite():void-favoriteDao:SimpleHibernateTemplete-memberName-userInfo:UserInfofavoriteMapProductSet:set-favoriteId:String-favorite:Favorite圖5-13收藏夾模塊類圖53 電子科技大學(xué)碩士學(xué)位論文位于中間位置的中間件服務(wù)器根據(jù)客戶端發(fā)送過來的用戶ID信息,調(diào)用FavoriteProMapService類中的productList方法獲取用戶對象收藏夾中的商品信息,并將這些信息封裝在一個ArrayList數(shù)組中。之后該服務(wù)器按照之前客戶端和服務(wù)器之間約定好的數(shù)據(jù)格式將商品信息封裝成一個JSON對象,商品信息包括包括商品名稱、商品圖片、商品價(jià)格、商品數(shù)量等等。用戶收藏夾中的編輯功能是由FavoriteProMapAction中的EditProduct方法實(shí)現(xiàn)的,該方法首先確認(rèn)發(fā)送給服務(wù)器的用戶ID是否是空值,如果是空值則返回錯誤信息;如果用戶ID信息非空,則向服務(wù)器端發(fā)送FavoriteID,F(xiàn)avoriteProMapService根據(jù)該FavoriteID值檢查是否存在該商品,若存在則調(diào)用deleteProduct方法修改商品的數(shù)量,并清空收藏夾中的商品信息。如果用戶想要增加收藏夾中某件商品的數(shù)量通過調(diào)用FavoriteProMapService類中的addProduct方法就可以實(shí)現(xiàn)。收藏夾界面如圖5-14所示,收藏夾為空時(shí)的情形如圖5-15所示。該功能模塊的部分代碼如下所示:getDataFromServer(favoriteRequeset,newDataCallback>(){publicvoidprocessData(ListparamObject,booleanparamBoolean){data=paramObject;if(pageView!=null){myfavorite_product_list.removeFooterView(pageView);}if(paramObject.size()>=pageVo.pageLenth){showPageBar();圖5-14收藏夾界面54 第五章系統(tǒng)實(shí)現(xiàn)圖5-15收藏夾為空時(shí)界面}adapter=newMyFavoriteAdapter(MyFavoriteActivity.this,myfavorite_product_list,data);myfavorite_product_list.setAdapter(adapter);}});5.2.8其他模塊功能的實(shí)現(xiàn)賬號管理功能。類AccountActivity用于生成賬號管理界面,該類加載時(shí)會調(diào)用自身的Oncreate函數(shù),該函數(shù)會判斷用戶是否已經(jīng)登錄,若未登錄則自動跳轉(zhuǎn)至用戶登錄界面;如果用戶已經(jīng)登錄,Oncreate函數(shù)會調(diào)用類LocalMethod中的getLocalInfo方法獲取用戶的相關(guān)信息,之后活動AccountActivity會將用戶信息顯示在界面上。另外類LocalMethod中的logout方法可以實(shí)現(xiàn)用戶的登出功能,這樣用戶可以在適當(dāng)?shù)臅r(shí)間退出登錄狀態(tài)。地址管理功能。類AddressActivity實(shí)現(xiàn)了用戶地址管理界面,該類加載時(shí)會調(diào)用回到函數(shù)Oncreate,該函數(shù)會拉起一個AddressThread線程,該線程專門負(fù)責(zé)客戶端向服務(wù)器端發(fā)送的地址信息請求,位于服務(wù)器端的AddressAction類會捕獲接受客戶端發(fā)來的請求,并通過調(diào)用getAddress方法獲取用戶的地址信息,并將這些地址信息封裝成JSON對象返回客戶端。收貨地址的界面如圖5-16所示,收貨地址編輯界面如圖5-17所示。55 電子科技大學(xué)碩士學(xué)位論文圖5-16收貨地址界面圖5-17收貨地址編輯界面該模塊的部分實(shí)現(xiàn)代碼如下所示:switch(v.getId()){caseR.id.recent_browse_rl:startActivity(newIntent(this,ProductHistoryActivity.class));break;caseR.id.helpRelLay:startActivity(newIntent(this,HelpActivity.class));56 第五章系統(tǒng)實(shí)現(xiàn)break;caseR.id.aboutRelLay:startActivity(newIntent(this,AboutActivity.class));break;caseR.id.my_account_rl:startActivity(newIntent(this,AccountActivity.class));break;caseR.id.login:startActivity(newIntent(this,LoginActivity.class));break;}5.3系統(tǒng)持久層的實(shí)現(xiàn)持久層的實(shí)現(xiàn)包括持久化對象的選擇和設(shè)計(jì),DAO對象的具體實(shí)現(xiàn)。其中,持久化對象的選擇和設(shè)計(jì)就是設(shè)計(jì)系統(tǒng)中實(shí)體在數(shù)據(jù)庫中對應(yīng)的數(shù)據(jù)表;而DAO對象則主要負(fù)責(zé)對持久化對象的操作,包括添加、刪除、插入、更新等等。本系統(tǒng)在Spring的配置文件中配置了Hibernate的數(shù)據(jù)源。一旦Hibernate的數(shù)據(jù)源配置成功以后,系統(tǒng)就可以在已有的數(shù)據(jù)源基礎(chǔ)上配置SessionFactory對象,該對象繼承自父類AnnotationSessionFactoryBean,在此基礎(chǔ)上用戶就可以通過配置SessionFactory對象實(shí)現(xiàn)數(shù)據(jù)庫表的自動化生成,這也體現(xiàn)了面向?qū)ο蟮睦^承特征,通過繼承可以大大提高程序的開發(fā)效率,可以在前人成果的基礎(chǔ)上繼續(xù)深入開發(fā),而不必從頭開始。DAO組件則是系統(tǒng)通過繼承Hibernate標(biāo)準(zhǔn)架構(gòu)中的一個基類來實(shí)現(xiàn)的,通過繼承可以將父類中的公用API復(fù)用,也就實(shí)現(xiàn)了對持久化對象的添加、刪除、插入、更新等等操作。系統(tǒng)在需要數(shù)據(jù)持久化的時(shí)候只需要實(shí)例化一個DAO就可以方便完成操作。5.4軟件測試5.4.1性能測試系統(tǒng)性能測試結(jié)果如表5-4所示,從表5-4中可以看出本系統(tǒng)在程序開啟,用戶注冊登錄,用戶瀏覽商品等等方面,客戶端和服務(wù)器之間的響應(yīng)速度都是非常迅速的,跟淘寶和京東的客戶端表現(xiàn)很接近。如果能夠換一個性能更好的服務(wù)器,57 電子科技大學(xué)碩士學(xué)位論文客戶端和服務(wù)器之間的交互會更加的迅捷快速。表5-4系統(tǒng)性能測試結(jié)果單位(S)進(jìn)入程序注冊2登錄2打開商品詳情放入購物車第一次第二次第三次平均44212222本軟件822225.362.3N/AN/AN/AN/A1221.62.52.62.22.322第一次第二次第三次平均11.51.51.51.5261淘寶515.61141第一次第二次第三次平均412122京東432236.592.322.35.4.2兼容性測試用戶按鍵:在用戶任意按鍵的情況下,不會造成程序的死機(jī)、退出等等異常。在軟件的不同界面收到外部通知時(shí),系統(tǒng)可以正常切換,不會引起系統(tǒng)的異常或者死機(jī)。用戶通話:在用戶接聽電話或者播出電話的情況下,系統(tǒng)可以正常掛起,不會異常退出。跟主流軟件之間的兼容:本軟件不會跟市場上主流的軟件,微信,UC瀏覽器,墨跡天氣,有道、搜狗輸入法等用戶常用的軟件發(fā)生沖突,相互之間可以正常運(yùn)行,互不干擾。58 第五章系統(tǒng)實(shí)現(xiàn)5.4.3平臺適配性表5-5平臺適配性測試品牌HTCMoto三星魅族小米華為型號DesireG7ME860I5801M9網(wǎng)絡(luò)模塊CDMA2000CDMA2000WCDMAWCDMAWCDMAWCDMA系統(tǒng)平臺安卓2.1安卓2.2安卓2.3安卓2.2安卓4.1安卓4.1主屏大小480×800480×800480×800640×9601280×7201280×760是否通過通過通過通過通過2通過P6通過受限于有限條件,選取了HTC、Moto、三星、魅族、華為、小米的六款機(jī)器,分別運(yùn)行目標(biāo)軟件。測試結(jié)果如表5-5,可以看出,本軟件均通過了以上6個平臺的適配性測試。5.5本章小結(jié)本章主要介紹了客戶端服務(wù)器連接方式的建立,以及系統(tǒng)各個核心功能模塊、持久化對象的選擇、持久化層的具體實(shí)現(xiàn),并對實(shí)現(xiàn)后的系統(tǒng)進(jìn)行了初步的測試。59 電子科技大學(xué)碩士學(xué)位論文第六章總結(jié)與展望隨著智能手機(jī)在全民中的迅速普及,利用智能手機(jī)這一移動終端瀏覽電商網(wǎng)站、購物會原來越流行。因此開發(fā)一款基于Android平臺的手機(jī)購物軟件是很有現(xiàn)實(shí)意義的。該軟件基于經(jīng)典的客戶端服務(wù)器架構(gòu)(C/S架構(gòu)),運(yùn)行于手機(jī)端的Android應(yīng)用程序是是客戶端,而服務(wù)器端則是建立在數(shù)據(jù)庫服務(wù)器和Web服務(wù)器之上??蛻舳撕头?wù)器之間的通信格式采用輕量級的JSON格式,客戶端在響應(yīng)用戶的操作之后會主動向服務(wù)器發(fā)送HTTP請求,服務(wù)器端會接收這些請求,并視情況的不同而采取不用的業(yè)務(wù)處理流程,在得出處理結(jié)果之后再將處理結(jié)果返回至客戶端。在該手機(jī)購物系統(tǒng)的開發(fā)過程中,按照軟件工程的開發(fā)要求和SSH框架對事務(wù)的分層要求,依次進(jìn)行了軟件需求分析,事務(wù)邏輯的設(shè)計(jì)和實(shí)現(xiàn),數(shù)據(jù)持久化的設(shè)計(jì)和實(shí)現(xiàn)。在這個過程中,強(qiáng)化了我對Java語言的理解,使我掌握了一定的Android應(yīng)用程序開發(fā)技能,也更加深刻的理解了C/S架構(gòu)的優(yōu)劣,使我更深刻的理解了SSH架構(gòu)的優(yōu)勢,提高了我的程序開發(fā)能力。60

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時(shí)可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時(shí)聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。
關(guān)閉