程嬌華
(福建農(nóng)林大學(xué)軟件工程學(xué)院,福建福州350002)
隨著著中國(guó)市場(chǎng)經(jīng)濟(jì)的日趨成熟,中國(guó)企業(yè)面對(duì)的競(jìng)爭(zhēng)壓力越來(lái)越大,企業(yè)要想生存,在提高企業(yè)內(nèi)部管理效率、充分利用企業(yè)內(nèi)部資源的基礎(chǔ)上,必須不斷擴(kuò)展銷(xiāo)售渠道,擴(kuò)大消費(fèi)群體,提高企業(yè)的競(jìng)爭(zhēng)力。隨著信息化時(shí)代的到來(lái),電子商務(wù)網(wǎng)站成為企業(yè)對(duì)外展示商品信息、從事商務(wù)活動(dòng)的窗口。如何建立企業(yè)的電子商務(wù)網(wǎng)站,把企業(yè)業(yè)務(wù)擴(kuò)展到Internet上,已成為現(xiàn)代企業(yè)發(fā)展的一個(gè)重點(diǎn)。
因此,本文通過(guò)對(duì)Rails框架的體系結(jié)構(gòu)進(jìn)行深入分析的基礎(chǔ)上,結(jié)合Rails框架的特點(diǎn),設(shè)計(jì)出了基于Rails框架的電子商務(wù)網(wǎng)站。通過(guò)該網(wǎng)站,一方面可以加強(qiáng)對(duì)企業(yè)產(chǎn)品銷(xiāo)售的標(biāo)準(zhǔn)化、規(guī)范化管理,全面提高企業(yè)營(yíng)銷(xiāo)的管理水平和信息化程度;另一方面能夠合理利用人力和物力資源,有效地管理各種業(yè)務(wù)與關(guān)系,縮短銷(xiāo)售周期、降低銷(xiāo)售成本、增加收益,從而增強(qiáng)企業(yè)的市場(chǎng)競(jìng)爭(zhēng)力。
Rails是一個(gè)用Ruby編程語(yǔ)言編寫(xiě)的、開(kāi)源的Web應(yīng)用程序框架,它為程序開(kāi)發(fā)人員提供強(qiáng)大的框架支持。Rails的目標(biāo)是可以用輕松直接的方式,并用盡量少的代碼來(lái)開(kāi)發(fā)Web應(yīng)用。Rails不同于現(xiàn)有復(fù)雜的Web開(kāi)發(fā)框架,它是一個(gè)更符合實(shí)際需要而且更高效的Web框架,它結(jié)合了PHP體系快速開(kāi)發(fā)的優(yōu)點(diǎn)和Java體系程序規(guī)整的優(yōu)點(diǎn)。Rails框架實(shí)現(xiàn)了MVC(model-view-controller,模型-視圖-控制器)體系結(jié)構(gòu)。MVC是一個(gè)設(shè)計(jì)模式集,它分離了數(shù)據(jù)模型、用戶(hù)界面和應(yīng)用程序的控制邏輯。分離后的代碼保存在3個(gè)層中[1,2]:
(1)模型層:封裝了應(yīng)用程序中數(shù)據(jù)操作相關(guān)的代碼。應(yīng)用程序?qū)υ紨?shù)據(jù)存儲(chǔ)的任何動(dòng)作都會(huì)經(jīng)由此層。修改或添加數(shù)據(jù)存儲(chǔ)中的數(shù)據(jù)含義的操作代碼要在此層中執(zhí)行。
(2)視圖層:即表現(xiàn)層,封裝了程序的頁(yè)面和表單。它負(fù)責(zé)向用戶(hù)展示應(yīng)用程序的執(zhí)行結(jié)果。
(3)控制器層:包含了應(yīng)用程序的控制邏輯??刂瞥绦蛄鞒痰拇a以及用戶(hù)觸發(fā)某個(gè)方法后將要執(zhí)行的代碼存放在此層中。
各個(gè)組件之間的關(guān)系如圖1所示。

基于Rails框架的電子商務(wù)網(wǎng)站主要就是實(shí)現(xiàn)網(wǎng)上購(gòu)物的信息化管理,因此電子商務(wù)網(wǎng)站最核心的功能就是實(shí)現(xiàn)網(wǎng)上在線(xiàn)銷(xiāo)售功能,以擴(kuò)展企業(yè)的銷(xiāo)售渠道,擴(kuò)大企業(yè)產(chǎn)品消費(fèi)群體,提高企業(yè)的效益。
作為開(kāi)源語(yǔ)言,Ruby被移植為可以在許多不同計(jì)算機(jī)平臺(tái)和架構(gòu)體系上運(yùn)行的語(yǔ)言。包括M icrosoftWindows(95/98/XP/Vista)、Linux、MS-DOS、BSD、BeOS等。為了方便起見(jiàn),本課題選擇在Windows XP下搭建開(kāi)發(fā)平臺(tái)。首先下載并安裝最新的Ruby 1.9.1-p378一鍵安裝包。然后通過(guò)RubyGems安裝Rails,RubyGems是標(biāo)準(zhǔn)的Ruby包管理器,它的功能類(lèi)似于Linux下的apt-get。使用RubyGems可以方便地從遠(yuǎn)程服務(wù)器下載并安裝Rails。安裝成功后,在命令行窗口中輸入并運(yùn)行rails–v,系統(tǒng)將會(huì)顯示Rails的版本信息,如圖2所示,顯示的Rails版本為2.3.5。

圖2 Rails的版本信息
目前Ruby語(yǔ)言只支持以下幾種數(shù)據(jù)庫(kù):Oracle、IBM DB2、MySQL、PostgreSQL、SQLite、Microsoft SQL Server和Firebird,這些數(shù)據(jù)庫(kù)各有優(yōu)劣。由于MySQL是一個(gè)優(yōu)秀的開(kāi)源數(shù)據(jù)庫(kù)管理系統(tǒng),它具有快速、易用的特點(diǎn),因此受到了全球開(kāi)發(fā)者的廣泛支持,而且Ruby on Rails框架直接集成了到MySQL數(shù)據(jù)庫(kù)的接口,因此MySQL數(shù)據(jù)庫(kù)比較適合作為Ruby on Rails開(kāi)發(fā)的后臺(tái)數(shù)據(jù)庫(kù)。本文也使用MySQL數(shù)據(jù)庫(kù)管理系統(tǒng)對(duì)后臺(tái)進(jìn)行創(chuàng)建和管理。
通過(guò)對(duì)網(wǎng)站進(jìn)行需求分析可知,電子商務(wù)網(wǎng)站中使用的數(shù)據(jù)庫(kù)實(shí)體對(duì)象分別為商品類(lèi)型、商品信息、商品訂單、商品訂單明細(xì)和管理員實(shí)體。其中,商品訂單實(shí)體對(duì)應(yīng)的數(shù)據(jù)表如表1所示。

表1 商品訂單信息表
3.3.1 網(wǎng)站首頁(yè)設(shè)計(jì)
在電子商務(wù)網(wǎng)站的首頁(yè)商品展示區(qū)中應(yīng)該能夠使客戶(hù)在第一時(shí)間看到該企業(yè)最新推出的精品展銷(xiāo)、最新商品及熱門(mén)商品,而且在“商品分類(lèi)列表”中客戶(hù)可以對(duì)商品進(jìn)行分類(lèi)瀏覽查詢(xún),并根據(jù)自己的喜好購(gòu)買(mǎi)所需的商品。
在/app/views/main路徑下,編寫(xiě)B(tài)ook_Info.rhtm l視圖,用于顯示企業(yè)展示商品的基本信息。部分代碼片段如下:


展示商品信息頁(yè)面不會(huì)被重載,頁(yè)面內(nèi)容也不會(huì)被刷新,只是局部更新,這是由于程序中使用了Rails框架中的Ajax技術(shù)??蛻?hù)可以通過(guò)點(diǎn)擊展示商品信息模塊中的商品照片,直接進(jìn)入購(gòu)物車(chē)管理頁(yè)面。
3.3.2 購(gòu)物車(chē)管理模塊設(shè)計(jì)
購(gòu)物車(chē)功能的實(shí)現(xiàn)是電子商務(wù)網(wǎng)站設(shè)計(jì)的關(guān)鍵,主要用于顯示及管理用戶(hù)的購(gòu)物信息。用戶(hù)通過(guò)購(gòu)物車(chē)管理頁(yè)面,可以進(jìn)行查看和編輯商品信息等操作。購(gòu)物車(chē)管理頁(yè)面實(shí)現(xiàn)的功能主要包括添加商品到購(gòu)物車(chē)、瀏覽購(gòu)物車(chē)中的商品信息、修改購(gòu)物車(chē)中的商品信息、刪除購(gòu)物車(chē)中的商品和清空購(gòu)物車(chē)等。
本頁(yè)面通過(guò)在admin_control.rb控制器文件中添加list_product方法實(shí)現(xiàn)添加購(gòu)買(mǎi)商品記錄進(jìn)數(shù)據(jù)庫(kù),代碼片段如下:

系統(tǒng)調(diào)用了Rails提供的paginate方法來(lái)返回當(dāng)前頁(yè)的product對(duì)象和paginator對(duì)象(用于分頁(yè)設(shè)置),這些product對(duì)象是按照OrderTime和product_id進(jìn)行排序的;并且,在paginator對(duì)象中將每頁(yè)最多顯示的記錄條數(shù)設(shè)置為5。然后,將返回的product對(duì)象和paginator對(duì)象分別賦值給@products_pages和@products兩個(gè)實(shí)例變量。
在adm in_control.rb控制器文件中添加destroy_product方法實(shí)現(xiàn)從數(shù)據(jù)庫(kù)中刪除一條商品記錄,代碼片段如下:

Model文件中不需要另外添加任何代碼??蛻?hù)在瀏覽所有商品的頁(yè)面中選擇一條購(gòu)買(mǎi)商品記錄,單擊它的“刪除”鏈接,并在確認(rèn)提示窗口中單擊“確定”按鈕,即可看到瀏覽所有商品的頁(yè)面中少了一條剛才刪除的購(gòu)買(mǎi)商品記錄。
3.3.3 在線(xiàn)支付模塊設(shè)計(jì)
在線(xiàn)支付功能一般由兩部分組成,一是選擇在線(xiàn)支付方式,二是填寫(xiě)自己的支付卡號(hào)和支付密碼,完成訂單支付。為了拓展銀行業(yè)務(wù),目前許多大型銀行都在網(wǎng)上開(kāi)設(shè)了網(wǎng)上銀行業(yè)務(wù),并提供相應(yīng)的網(wǎng)上銀行支付接口。因此,客戶(hù)在完成購(gòu)物車(chē)中的商品信息的修改后,電子商務(wù)網(wǎng)站將給客戶(hù)生成一個(gè)訂單(有一個(gè)唯一的訂單號(hào)),單擊“提交”按鈕即可進(jìn)入“選擇支付方式”頁(yè)面(PayWay.rhtm l),在該頁(yè)客戶(hù)可以選擇在線(xiàn)支付方式進(jìn)行在線(xiàn)付款,其運(yùn)行效果如圖3所示。
實(shí)現(xiàn)該功能的具體步驟如下:首先將一個(gè)表格(Table)控件置于PayWay.rhtm l頁(yè)中,為整個(gè)頁(yè)面進(jìn)行布局。然后從“工具箱/標(biāo)準(zhǔn)”選項(xiàng)卡中拖放17個(gè)ImageButton控件,設(shè)置各個(gè)控件的ImageUrl屬性值,用于顯示在線(xiàn)支付方式。最后在Click事件下跳轉(zhuǎn)到銀行的在線(xiàn)支付頁(yè)填寫(xiě)支付信息,完成訂單支付?;赗ails框架的電子商務(wù)網(wǎng)站流程圖如圖4所示,

為了驗(yàn)證系統(tǒng)平臺(tái)的各個(gè)功能,系統(tǒng)通過(guò)使用Selenium和Selenium on Rails插件進(jìn)行自動(dòng)化測(cè)試。Selenium的內(nèi)核,即Selenium Core,是用JavaScript實(shí)現(xiàn)的,它可以直接在瀏覽器里運(yùn)行,而不需要在另一個(gè)進(jìn)程里運(yùn)行。因此,采用Selenium編寫(xiě)的腳本可以發(fā)出類(lèi)似于鼠標(biāo)單擊這樣的命令,從而模擬客戶(hù)瀏覽器和Web應(yīng)用程序之間,以及管理員瀏覽器和Web應(yīng)用程序之間的真實(shí)交互[3]。例如,我們可以寫(xiě)一個(gè)腳本,模擬客戶(hù)訪(fǎng)問(wèn)租賃信息管理模塊,先在車(chē)輛租賃登記模塊中填寫(xiě)好內(nèi)容,然后單擊“預(yù)定”按鈕提交。這時(shí),Selenium可以檢查發(fā)送是否正確,即通過(guò)檢查下一個(gè)顯示頁(yè)面上是否包括預(yù)期的內(nèi)容,所有的這些動(dòng)作都是通過(guò)Selenium命令實(shí)現(xiàn)的。
Selenium on Rails是由Jonas Bengtsson開(kāi)發(fā)的一個(gè)插件,它把Selenium集成到Rails框架中。這個(gè)插件提供了很多特性來(lái)簡(jiǎn)化Rails中Selenium的使用。
隨著Internet的發(fā)展和普及,網(wǎng)上購(gòu)物這一新型的購(gòu)物方式已逐漸被人們所接受,并迅速改變甚至取代了傳統(tǒng)的購(gòu)物觀念。而在線(xiàn)交易作為新的商業(yè)運(yùn)營(yíng)模式也被越來(lái)越多的企業(yè)所運(yùn)用。本文所設(shè)計(jì)的基于Rails框架的電子商務(wù)網(wǎng),充分利用了Rails框架的優(yōu)點(diǎn),從整體上降低了企業(yè)成本,加快企業(yè)對(duì)市場(chǎng)的響應(yīng)速度,從而大大提高了企業(yè)的服務(wù)質(zhì)量和競(jìng)爭(zhēng)力。
[1] 劉志軍,黃志明.基于Ruby on Rails的Web應(yīng)用研究[J].電腦知識(shí)與技術(shù),2009,18:4770~4771.
[2] Anon.Ruby on Rails[J].Database and Network Journal,2005,35(6):6-7.
[3] Geer,David.Will software developers ride ruby on rails to success?[J].2006,39(2):18-20.
[4] 柳靖,曹璐,趙丹.Ruby on Rails快速Web應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)[M].北京:電子工業(yè)出版社,2006,8.
[5] 周迅飛,王崑聲.基于MVC模式的Rails框架研究[J].計(jì)算機(jī)仿真,2006,2:270~274..