梁榮鵬++陳世宇++陳正銘++彭玄璋
摘 要:隨著Android智能系統(tǒng)的發(fā)展,APP應(yīng)用開(kāi)發(fā)也越來(lái)越普及,其開(kāi)發(fā)技術(shù)也愈發(fā)成熟。本文對(duì)基于Android平臺(tái)的家政應(yīng)用訂單模塊的設(shè)計(jì)與開(kāi)發(fā)進(jìn)行了梳理。首先對(duì)該模塊在整個(gè)家政應(yīng)用中的運(yùn)行路徑進(jìn)行了介紹,并展示其中運(yùn)用到的開(kāi)發(fā)技術(shù)與設(shè)計(jì)模式;然后詳細(xì)分析了該應(yīng)用訂單模塊的設(shè)計(jì)思想、開(kāi)發(fā)步驟與基本原理;最后對(duì)該模塊實(shí)現(xiàn)的功能進(jìn)行了總結(jié)。該平臺(tái)開(kāi)發(fā)的完成能在一定程度上改善目前家政行業(yè)服務(wù)差、信息不透明等弊端。
關(guān)鍵詞:Android;家政;訂單;SSM框架;web后端
中圖分類(lèi)號(hào):TP311.1 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言(Introduction)
改革開(kāi)放以來(lái),我國(guó)的經(jīng)濟(jì)快速增長(zhǎng),高新產(chǎn)業(yè)也不斷發(fā)展,互聯(lián)網(wǎng)與智能移動(dòng)終端更是成為廣大人民寸步不離的必需品[1]。家政O2O(Online To Offlline)系統(tǒng)能在一定程度上改善目前傳統(tǒng)家政行業(yè)發(fā)展緩慢、各方面不成熟、價(jià)格亂、服務(wù)差、中介坑人、信息不透明等問(wèn)題。一般家政O2O系統(tǒng)實(shí)現(xiàn)的功能主要有:分角色(服務(wù)者、雇主)注冊(cè)登錄,查看個(gè)人信息,查看附近服務(wù)者,查看訂單模塊等。本文主要針對(duì)家政O2O系統(tǒng)中實(shí)時(shí)訂單交互的需求,搭建Android Studio開(kāi)發(fā)環(huán)境,采用C/S(Client/Server)的架構(gòu),結(jié)合MVC設(shè)計(jì)模式,運(yùn)用Java語(yǔ)言進(jìn)行該應(yīng)用訂單模塊的設(shè)計(jì)與開(kāi)發(fā)。
2 家政應(yīng)用與訂單模塊流程介紹(Introduction of
the housekeeping application and its order
module)
2.1 雇主端
雇主通過(guò)Android手機(jī)雇主端APP登錄認(rèn)證[2]后,可在程序主界面上查看附近服務(wù)者的信息,選擇適合自己的服務(wù)者,并執(zhí)行預(yù)約;若無(wú)相應(yīng)的服務(wù)者,用戶(hù)可以點(diǎn)擊立即預(yù)約按鈕,讓系統(tǒng)為用戶(hù)智能分配服務(wù)者。當(dāng)預(yù)約服務(wù)者成功時(shí),服務(wù)者將會(huì)在預(yù)約時(shí)間內(nèi)到達(dá)用戶(hù)指定的地點(diǎn),啟動(dòng)服務(wù)計(jì)時(shí),服務(wù)結(jié)束時(shí)可點(diǎn)擊按鈕停止計(jì)時(shí),并進(jìn)入服務(wù)結(jié)算界面。此時(shí)用戶(hù)可以明確地知道本次服務(wù)的具體用時(shí)與具體計(jì)費(fèi),當(dāng)點(diǎn)擊立即支付時(shí)可調(diào)起時(shí)下主流支付渠道來(lái)完成支付;支付完成還可以選擇性地給服務(wù)者進(jìn)行相應(yīng)的評(píng)價(jià),系統(tǒng)將根據(jù)用戶(hù)的評(píng)分對(duì)服務(wù)者進(jìn)行綜合評(píng)分。
2.2 服務(wù)者端
服務(wù)者通過(guò)Android手機(jī)服務(wù)者端APP登錄認(rèn)證后,可以通過(guò)下拉刷新操作得到雇主請(qǐng)求預(yù)約的訂單列表,服務(wù)者可以在該列表中選擇相應(yīng)的用戶(hù)接受預(yù)約。當(dāng)服務(wù)者確認(rèn)接單后,需在預(yù)約指定的時(shí)間內(nèi)到達(dá)指定的地點(diǎn);當(dāng)雇主端啟動(dòng)計(jì)時(shí)按鈕時(shí),在服務(wù)者端將會(huì)彈出提示框提示是否開(kāi)始計(jì)時(shí),若確認(rèn)則兩端端同步計(jì)時(shí),直至服務(wù)結(jié)束。服務(wù)結(jié)束,服務(wù)者端可以向雇主發(fā)起收款,完成收款即完成該訂單。
2.3 后臺(tái)端[3]
超級(jí)管理員可通過(guò)瀏覽器登錄后臺(tái)端,以管理相關(guān)訂單。當(dāng)用戶(hù)端發(fā)出預(yù)約請(qǐng)求時(shí),后臺(tái)端能接收到用戶(hù)填寫(xiě)的預(yù)約信息,管理員可以在訂單管理選項(xiàng)中瀏覽和管理所有的用戶(hù)訂單,其中包括跟蹤訂單狀態(tài)等功能[4]。
家政應(yīng)用訂單模塊流程示意圖,如圖1所示。
3 相關(guān)技術(shù)(Relative technologies)
本系統(tǒng)采用C/S經(jīng)典架構(gòu),Client端選用Android作為操作系統(tǒng),并采用MVC設(shè)計(jì)模式;Server端選用Java語(yǔ)言進(jìn)行搭建,并采用SSM框架協(xié)助開(kāi)發(fā)。
3.1 C/S結(jié)構(gòu)
C/S結(jié)構(gòu),即客戶(hù)機(jī)和服務(wù)器結(jié)構(gòu),使用它可以完全利用兩端硬件環(huán)境的優(yōu)勢(shì),將各自的業(yè)務(wù)邏輯合理分配到Server端和Client端,從而大大減少系統(tǒng)的通訊開(kāi)銷(xiāo)。目前市場(chǎng)上主流應(yīng)用程序系統(tǒng)使用的都是C/S形式的分層結(jié)構(gòu)。
3.2 Android相關(guān)開(kāi)發(fā)技術(shù)
3.2.1 Android簡(jiǎn)介
Android是一種基于Linux?內(nèi)核的綜合操作系統(tǒng)。隨著科技的發(fā)展,Android的用處越來(lái)越廣,人們對(duì)其的使用也越來(lái)越普及。谷歌官方推薦的開(kāi)發(fā)Android應(yīng)用的軟件是Android Studio 2.3。本應(yīng)用的開(kāi)發(fā)也將使用此開(kāi)發(fā)軟件,并使用其相應(yīng)的開(kāi)發(fā)框架。
3.2.2 OKHTTP框架
OKHTTP是Android網(wǎng)絡(luò)框架之一,是一個(gè)處理網(wǎng)絡(luò)請(qǐng)求的輕量級(jí)框架。該框架的使用允許每個(gè)客戶(hù)端的請(qǐng)求都是連接到同一個(gè)主機(jī)地址,大大提高請(qǐng)求的效率;擁有共享的Socket,使得對(duì)服務(wù)器的請(qǐng)求次數(shù)減少;建立共享連接池,大大減少請(qǐng)求的延遲;利用緩存響應(yīng)數(shù)據(jù)來(lái)減少重復(fù)的網(wǎng)絡(luò)請(qǐng)求,在根本上減少對(duì)流量的消耗。
3.2.3 極光推送框架[5]
該框架簡(jiǎn)單易集成,使開(kāi)發(fā)者能夠快速部署,從而更專(zhuān)注主營(yíng)業(yè)務(wù)。該框架具有便捷的推送接口集成,同時(shí)支持在網(wǎng)站上直接推送,也提供送達(dá)統(tǒng)計(jì)的API使用;另外,該框架還具有強(qiáng)大的技術(shù)優(yōu)勢(shì),客戶(hù)端SDK采用自定義的協(xié)議保持長(zhǎng)連接,而從根源上大大降低電量與流量的損耗。
3.3 后臺(tái)端相關(guān)開(kāi)發(fā)技術(shù)
3.3.1 SSM框架簡(jiǎn)介
SSM框架[6],是Spring+SpringMVC+MyBatis的縮寫(xiě),是繼SSH之后主流的Java EE企業(yè)級(jí)框架,對(duì)搭建各種企業(yè)級(jí)應(yīng)用系統(tǒng)起到異曲同工之妙。SSM框架是標(biāo)準(zhǔn)的MVC設(shè)計(jì)模式。它將整個(gè)系統(tǒng)劃分為顯示層、Controller層、Service層、DAO層,從而簡(jiǎn)化后臺(tái)端的設(shè)計(jì)與開(kāi)發(fā)。
3.3.2 Ajax技術(shù)簡(jiǎn)介
Ajax技術(shù)是一種無(wú)須在全局刷新網(wǎng)頁(yè)的情況下,能夠更新局部網(wǎng)頁(yè)內(nèi)容的技術(shù)。它的工作原理是瀏覽器通過(guò)網(wǎng)絡(luò)發(fā)送一個(gè)httpRequest到服務(wù)器,服務(wù)器解析該httpRequest并創(chuàng)建一個(gè)Response和發(fā)送瀏覽器請(qǐng)求的數(shù)據(jù)給瀏覽器,瀏覽器通過(guò)JavaScript來(lái)解析返回的數(shù)據(jù)并刷新頁(yè)面內(nèi)容,完成一個(gè)Ajax刷新[7]。endprint
4 訂單模塊開(kāi)發(fā)(Developing of order module)
訂單模塊的設(shè)計(jì)與實(shí)現(xiàn)思路如下:雇主端與服務(wù)者端(統(tǒng)稱(chēng)Android端)使用Android studio開(kāi)發(fā)。服務(wù)器則利用Tomcat搭建Web容器,用Eclipse作為服務(wù)器編程工具,并使用MySql數(shù)據(jù)庫(kù)開(kāi)發(fā)環(huán)境提供數(shù)據(jù)層應(yīng)用。同時(shí)使用了Navicat for MySql對(duì)數(shù)據(jù)庫(kù)進(jìn)行可視化操作。最終通過(guò)兩端的協(xié)同工作,完成訂單模塊功能。
4.1 Android端設(shè)計(jì)
Android端采用了MVC的設(shè)計(jì)思想[8],即視圖層與控制層分開(kāi),先分別實(shí)現(xiàn)各自的目標(biāo),再通過(guò)相關(guān)操作實(shí)現(xiàn)兩者的綁定關(guān)系,最終得到統(tǒng)一協(xié)作的可運(yùn)行系統(tǒng)。
4.1.1 視圖層
在Android的應(yīng)用開(kāi)發(fā)中,視圖設(shè)計(jì)和代碼編寫(xiě)的工作是分離實(shí)現(xiàn)的。開(kāi)發(fā)者可以首先完成界面的設(shè)計(jì)再進(jìn)行下一步的開(kāi)發(fā)。兩個(gè)客戶(hù)端的訂單首界面如圖2和圖3所示。
訂單模塊的訂單首界面主要采用了組件ListView,即以列表的形式對(duì)內(nèi)容進(jìn)行展示。為了能讓App擁有更豐富的功能,在雇主端訂單首界面的ListView中添加了列表頭header。而由于原生的header和ListView中每個(gè)Item的界面均為空白,開(kāi)發(fā)者需根據(jù)具體需求分別設(shè)計(jì)header和兩個(gè)端對(duì)應(yīng)Item的界面。
4.1.2 訂單實(shí)體類(lèi)
在顯示數(shù)據(jù)之前,需要自定義一個(gè)類(lèi)用于保存這些必要數(shù)據(jù)。因此,以雇主端訂單為例,開(kāi)發(fā)者自定義了RecommendBodyValue類(lèi)用于作為數(shù)據(jù)存儲(chǔ)的基礎(chǔ)。其中,這個(gè)類(lèi)繼承自BaseModel類(lèi),該類(lèi)實(shí)現(xiàn)了將變量進(jìn)行序列化的操作,以備數(shù)據(jù)傳輸。用戶(hù)端訂單實(shí)體類(lèi)代碼如下:
public class RecommandBodyValue extends BaseModel{
public int type; //用戶(hù)預(yù)約的阿姨服務(wù)類(lèi)型
public String auntname;//阿姨姓名
public String auntlogo;//阿姨頭像
public String address;//服務(wù)地址
public String time;//服務(wù)時(shí)間
public int price;//服務(wù)計(jì)費(fèi)
...
}
4.1.3 數(shù)據(jù)綁定控制
由于在界面設(shè)計(jì)的時(shí)候使用到ListView[9],而其原生的Adapter的功能相當(dāng)有限,為了能讓對(duì)應(yīng)的數(shù)據(jù)顯示在相應(yīng)的位置上,開(kāi)發(fā)者自定義了繼承自L(fǎng)istAdapter的orderListAdapter,并編寫(xiě)了關(guān)于綁定數(shù)據(jù)的構(gòu)造方法,其中的參數(shù)除了當(dāng)前Activity的上下文,還有就是類(lèi)型為訂單實(shí)體的ArrayList對(duì)象,如圖4所示。
當(dāng)程序執(zhí)行到這個(gè)方法的構(gòu)造函數(shù)時(shí),即完成了數(shù)據(jù)的初始化。除此之外,為了將保存的數(shù)據(jù)顯示在各自的控件上,還在該自定義的orderListAdapter中綁定了要使用到的控件。當(dāng)要顯示時(shí),通過(guò)調(diào)用setText()來(lái)設(shè)置控件的內(nèi)容,從而顯示到屏幕上。orderListAdapter()方法構(gòu)造函數(shù)代碼如下:
public orderListAdapter(Context context,ArrayList
mContext=context;
mData=data;
mInflate=LayoutInflater.from(mContext);
mImagerLoader=ImageLoaderUtil.getInstance(mContext);
}
4.1.4 界面綁定控制
開(kāi)發(fā)者在編寫(xiě)XML布局文件時(shí),可以為每個(gè)組件設(shè)置一個(gè)唯一標(biāo)識(shí)Id。
(1)當(dāng)使用者進(jìn)入訂單模塊首界面時(shí),即開(kāi)始了一個(gè)Activity。在該Activity的onCreate()方法中,使用new ListView()語(yǔ)句來(lái)創(chuàng)建一個(gè)ListView對(duì)象,并通過(guò)findViewById()方法尋找布局文件中唯一的Id以實(shí)例化該ListView對(duì)象。
(2)通過(guò)ListView的setAdapter()與自定義的適配器orderListAdapter進(jìn)行綁定,用以顯示預(yù)先設(shè)計(jì)好的item界面。
(3)通過(guò)ListView的addHeaderView()方法與預(yù)先設(shè)計(jì)好的header布局綁定顯示。
4.1.5 網(wǎng)絡(luò)請(qǐng)求控制
基于Okhttp在Android應(yīng)用上的優(yōu)勢(shì),開(kāi)發(fā)者將其封裝成一個(gè)工具類(lèi)CommonOkHttpClient。該類(lèi)可以實(shí)現(xiàn)get/post請(qǐng)求的發(fā)送[10],并對(duì)Response回來(lái)的json數(shù)據(jù)進(jìn)行字符串轉(zhuǎn)換。此外,開(kāi)發(fā)者還定義一個(gè)請(qǐng)求中心RequestCenter類(lèi),并在該類(lèi)中調(diào)用了Okhttp工具類(lèi)以方便get/post請(qǐng)求的發(fā)送。該類(lèi)的主要作用是管理一切業(yè)務(wù)請(qǐng)求。
以雇主端界面為例,當(dāng)用戶(hù)希望通過(guò)下拉刷新其訂單列表時(shí),可在RequestCenter類(lèi)中定義一個(gè)靜態(tài)方法,通過(guò)傳參調(diào)用向服務(wù)器發(fā)送get請(qǐng)求。如果服務(wù)器攔截到該請(qǐng)求,則在后臺(tái)進(jìn)行代碼處理,返回相應(yīng)json數(shù)據(jù)給該方法,并后續(xù)地將json數(shù)據(jù)轉(zhuǎn)化成相應(yīng)訂單實(shí)體類(lèi)保存在實(shí)例化的參數(shù)中,即完成了一次訂單列表的刷新。
4.1.6 消息推送控制
Android端集成了極光推送框架JPush Android SDK。它以Android Service的形式長(zhǎng)期運(yùn)行在手機(jī)后臺(tái)而創(chuàng)建并保持長(zhǎng)連接,使設(shè)備保持永遠(yuǎn)在線(xiàn)的能力,以便消息能夠及時(shí)推送到手機(jī)端。其工作原理圖如圖5所示。
4.2 后臺(tái)端設(shè)計(jì)
4.2.1 數(shù)據(jù)庫(kù)設(shè)計(jì)
家政系統(tǒng)采用了MySql作為存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)[11]。開(kāi)發(fā)者在開(kāi)啟了數(shù)據(jù)庫(kù)服務(wù)后,連接數(shù)據(jù)庫(kù),并新建了數(shù)據(jù)庫(kù)AuntComing,其中包括了用戶(hù)信息表、服務(wù)者(阿姨)信息表等數(shù)據(jù)表。對(duì)于訂單填寫(xiě)時(shí)所需的信息,開(kāi)發(fā)者定義了如下字段:訂單Id、用戶(hù)Id、阿姨Id、服務(wù)時(shí)長(zhǎng)、服務(wù)地址、服務(wù)價(jià)格、預(yù)約時(shí)間。其中主鍵為訂單Id,用戶(hù)Id與阿姨Id則作為外鍵。當(dāng)需要使用用戶(hù)和阿姨的基本信息時(shí),可通過(guò)用戶(hù)Id與阿姨Id進(jìn)行多表復(fù)合查詢(xún)。訂單信息表的物理模型如圖6所示。
4.2.2 SSM框架組合實(shí)現(xiàn)
基于SSM框架開(kāi)發(fā)的系統(tǒng)結(jié)構(gòu)分層明顯,可簡(jiǎn)化開(kāi)發(fā)流程。家政平臺(tái)的后臺(tái)端采用SSM框架進(jìn)行搭建。SSM框架的層次結(jié)構(gòu)具體可以分為view層、model層、DAO層、service層、controller層,各層各屬其職,又相互協(xié)作。
(1)model層為數(shù)據(jù)庫(kù)各表的實(shí)體類(lèi)該類(lèi)的成員變量均為各表的各字段。在本研究對(duì)象中,model層則包含了訂單信息類(lèi)。
(2)DAO層則定義了所有數(shù)據(jù)訪(fǎng)問(wèn)接口,為數(shù)據(jù)庫(kù)查詢(xún)作準(zhǔn)備。以本研究對(duì)象為例,DAO層包含了selectByPrimaryKey(String id)等接口。
(3)service層則定義了與業(yè)務(wù)邏輯有關(guān)的接口,如查詢(xún)所有訂單信息接口List
(4)controller層則是實(shí)現(xiàn)數(shù)據(jù)處理與反饋的地方,即在該層,開(kāi)發(fā)者可以與view層進(jìn)行綁定,并把相應(yīng)的數(shù)據(jù)更新顯示到view層上。
各個(gè)處理層是否能夠相互協(xié)作,關(guān)鍵在于框架中各配置文件是否能夠正確編寫(xiě)。其中spring-mvc.xml則實(shí)現(xiàn)了指定后綴視圖文件的視圖解析[12],自動(dòng)掃描控制器,注解的啟動(dòng)等功能;而myBatis.xml則實(shí)現(xiàn)了配置數(shù)據(jù)源的功能。另外,其還能自動(dòng)掃描DAO層中所有接口,讓其與xxxmapping.xml一一對(duì)應(yīng)起來(lái),即可通過(guò)編寫(xiě)數(shù)據(jù)庫(kù)操作語(yǔ)句來(lái)操作數(shù)據(jù)庫(kù)。
5 結(jié)論(Conclusion)
以家政平臺(tái)中的訂單模塊作為研究對(duì)象,先對(duì)其執(zhí)行流程作出了介紹,接著介紹了分各端使用到的關(guān)鍵技術(shù),最后就各端的設(shè)計(jì)與實(shí)現(xiàn)進(jìn)行了詳細(xì)的介紹。該模塊的實(shí)現(xiàn)能基本滿(mǎn)足當(dāng)前家政行業(yè)的市場(chǎng)需求,方便了雇主與服務(wù)者,結(jié)合了“互聯(lián)網(wǎng)+”與創(chuàng)新創(chuàng)業(yè),為家政行業(yè)的發(fā)展起到推進(jìn)作用。
參考文獻(xiàn)(References)
[1] Rattanachai R,Sreekaewin P,Sittichailapa T.Development of Thai rice implantation recommend system based on android operating system[J].Procedia-Social and Behavioral Sciences,2015,197:1048-1052.
[2] Dong C,Liu X.Development of android application for language studies[J].IERI Procedia,2013,4:8-16.
[3] Korkmaz I,Metin S K,Gurek A,et al.A cloud based and android supported scalable home automation system[J].Computers & Electrical Engineering,2015,43:112-128.
[4] 宋恒力.基于Android平臺(tái)與Web服務(wù)器的課程管理信息系統(tǒng)[J].電子技術(shù),2014(12):59-63.
[5] 黃河清,陳文.Android平臺(tái)消息推送服務(wù)的實(shí)現(xiàn)[J].電腦編程技巧與維護(hù),2014,18:53-55.
[6] 王艷清,陳紅.基于SSM框架的智能web系統(tǒng)研發(fā)設(shè)計(jì)[J].北京:北京化工大學(xué),2012,12:33.
[7] 盧曉陽(yáng).JSON數(shù)據(jù)交換語(yǔ)言在Ajax技術(shù)中的應(yīng)用[J].河南科技,2013(20):23.
[8] 于少波,李新明,劉東.基于B/S和MVC模式的武器裝備體系評(píng)估系統(tǒng)設(shè)計(jì)[J].太赫茲科學(xué)與電子信息學(xué)報(bào),2015,13(4):
635-640.
[9] 葉斌,李玉榕,陳建國(guó),等.基于Android系統(tǒng)的KOA運(yùn)動(dòng)監(jiān)測(cè)系統(tǒng)研究[J]. 儀器儀表學(xué)報(bào),2014(S2):7-11.
[10] 賈文杰,孫志峰.基于Android平臺(tái)的智能導(dǎo)游系統(tǒng)[J].機(jī)電工程,2011,28(10):1257-1259.
[11] 吳瓊.基于Android平臺(tái)下高校師生作業(yè)答題系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].農(nóng)業(yè)網(wǎng)絡(luò)信息,2014(04):129-130.
[12] 廖嘉燦,侯超鈞.基于SSM和HttpClient的在線(xiàn)選課輔助系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化,2016(10):116-120;126.
作者簡(jiǎn)介:
梁榮鵬(1996-),男,本科生.研究領(lǐng)域:移動(dòng)端應(yīng)用程序研發(fā).
陳世宇(1996-),男,本科生.研究領(lǐng)域:網(wǎng)站開(kāi)發(fā),微信小程序開(kāi)發(fā).
陳正銘(1978-),男,碩士,信息系統(tǒng)項(xiàng)目管理師(高級(jí)).研究領(lǐng)域:數(shù)據(jù)結(jié)構(gòu)與計(jì)算機(jī)應(yīng)用軟件開(kāi)發(fā).
彭玄璋(1962-),男,本科,講師.研究領(lǐng)域:計(jì)算機(jī)系統(tǒng)結(jié)構(gòu),嵌入式系統(tǒng)開(kāi)發(fā).