最近中文字幕2018免费版2019,久久国产劲暴∨内射新川,久久久午夜精品福利内容,日韩视频 中文字幕 视频一区

首頁 > 文章中心 > 正文

小議實現(xiàn)網(wǎng)絡訂餐系統(tǒng)研究方案

前言:本站為你精心整理了小議實現(xiàn)網(wǎng)絡訂餐系統(tǒng)研究方案范文,希望能為你的創(chuàng)作提供參考價值,我們的客服老師可以幫助你提供個性化的參考范文,歡迎咨詢。

小議實現(xiàn)網(wǎng)絡訂餐系統(tǒng)研究方案

摘要本文對最新Web應用開發(fā)框架RubyOnRails的工作原理做了簡單介紹,討論了構(gòu)建一個基于ROR的Web應用的實現(xiàn)方法和所用到的技術(shù),并基于ROR開發(fā)了一個網(wǎng)絡訂餐系統(tǒng)

關鍵詞Rails;MVC;訂餐系統(tǒng);Web

1引言

ROR是RubyOnRails的英文簡稱,ROR是指使用Ruby語言實現(xiàn)的RailsWeb開發(fā)框架。

Ruby是一種功能強大的面向?qū)ο蟮摹⒔忉屝偷哪_本語言。Ruby語言具有下面幾個特點:語法簡單、純面向?qū)ο笳Z言、提供動態(tài)對象能力、使用單繼承機制、操作符重載、迭代器和閉包、垃圾回收、錯誤處理功能、擁有獨立于操作系統(tǒng)的線程機制、可移植性高。

RubyonRails是一個使用純Ruby語言編寫的、實現(xiàn)了MVC模型的、易于開發(fā)、配置和管理的Web應用程序的框架。Rails的設計思想由一組關鍵的概念來驅(qū)動:低重復(DRY)、約定優(yōu)于配置、快速Web開發(fā)框架、對數(shù)據(jù)庫訪問的支持。

將(模型-視圖-控制器)MVC模型用于軟件設計中可以使應用程序的構(gòu)造更加清晰。Rails是一個MVC框架。使用Rails開發(fā)應用時,每個代碼以及應用程序的每個部分都遵循標準的方式。也就是說,是在一個被事先準備好的框架內(nèi)開始應用程序設計的。Rails應用程序是由模塊化的、面向?qū)ο蟮哪_本語言Ruby寫成的,這些模塊之間的相互鏈接和關系驅(qū)動著MVC模型的運行。

ROR這些特點也使它逐步從一個開源和個人的Web開發(fā)框架走向主流,在諸多Web開發(fā)框架中以其鮮明的特色占據(jù)了一席之地。2007年12月6曰,ROR2.0,進一步強化了對企業(yè)應用的支持。

2系統(tǒng)分析與設計2.1功能描述

基于ROR在開發(fā)應用上的諸多優(yōu)勢,本文使用ROR開發(fā)了一個小型的網(wǎng)絡訂餐系統(tǒng),根據(jù)客戶要求,該系統(tǒng)應具備下列主要功能:

(1)向注冊的客戶提供可預訂商品的列表和詳細信息,供客戶選擇。這些信息的維護由系統(tǒng)管理員進行。

(2)向客戶提供一個訂單提交、瀏覽和處理界面,實現(xiàn)購物車形式的訂餐功能。

(3)提供用戶資料的管理功能,包括增加、刪除和信息修改。

(4)提供用戶登錄和權(quán)限控制功能,將為普通用戶和系統(tǒng)管理員提供不同的界面。

(5)提供商品和訂單信息的查詢功能、統(tǒng)計功能和打印功能。

系統(tǒng)選用數(shù)據(jù)庫作為后臺數(shù)據(jù)庫,運行環(huán)境為:Windows2000Server、Ruby1.8.4、Rails1.0、MySQL5.0。

2.2使用ROR實現(xiàn)訂餐系統(tǒng)的技術(shù)路線

1)將需求模塊化

設計中將以遞增式開發(fā)這個應用程序,首先使用Rails立即創(chuàng)建具有一些功能的簡單應用myMealOrder。

系統(tǒng)中開始只區(qū)分兩種不同的角色:買方和賣方。買方使用myMealOrder來瀏覽站點可以出售的商品,選擇商品并創(chuàng)建一個訂單。賣方使用myMealOrder來管理用于出售商品的列表,并等待處理訂單,然后將訂單發(fā)貨。

考慮到用戶需要選擇多項商品,系統(tǒng)中需要有地方保存用戶添加的產(chǎn)品列表的,所以在設計中添加了一個購物車。

2)使用Rails的“支架”

第一個任務是創(chuàng)建Web接口來管理系統(tǒng)中的商品信息---包括創(chuàng)建商品信息,編輯現(xiàn)有商品,查看已有的商品信息,刪除不需要的商品。為了實現(xiàn)以上功能,在數(shù)據(jù)庫中應當建立幾張表,使用Rails“支架”來自動生成最初的代碼,這也是Rails具有敏捷性開發(fā)效率的一個原因。

Rails“支架”是為管理一個“模型”而自動創(chuàng)建的一個框架。當運行“生成器”時,告訴它需要“支架”來生成一個特殊的“模型”(由“支架”創(chuàng)建的),并且需要通過給定的“控制器”(也是由“支架”創(chuàng)建的)來訪問它。在Rails中,“模型”被自動地映射到使用“模型”的類的名字的復數(shù)形式的數(shù)據(jù)庫表。在應用程序中,根據(jù)需要要求有一個名為good的“模型”,所以Rails將它與叫g(shù)oods的表關聯(lián)起來。

Rails是如何找到這個表的呢?在config/database.yml中設置development條目時,就已經(jīng)告訴Rails在哪兒找數(shù)據(jù)庫的表了。當啟動應用程序時,“模型”檢查數(shù)據(jù)庫內(nèi)的表,處理它要得到的列,然后創(chuàng)建數(shù)據(jù)庫表和Ruby對象之間的映射。通過“支架”表單“生成器”可以向“模型”要求有關表的字段信息,然后就使用它找到的字段來創(chuàng)建一個合適的html表單。

3)使用Rails的“控制器”

“控制器”處理來自瀏覽器的“請求”,一個應用程序可以有多個“控制器”。對于本次設計的myMealOrder應用程序來說,最終會有四個“控制器”,一個用于處理商品資料,一個用于處理定單信息,一個用于用戶資料,一個用于登錄管理。

4)在生成的源碼基礎上根據(jù)需要修改代碼

scaffold工具所生成的Rails“支架”使用Ruby代碼來組裝應用程序目錄樹。這個目錄樹表達了一個完整的應用程序構(gòu)架—它的內(nèi)部已經(jīng)放置了Ruby代碼;這些都是源代碼,而不是簡單地對一些標準庫的調(diào)用。這意味著可以修改“支架”內(nèi)產(chǎn)生的代碼,“支架”是作為一個應用程序的起點,而不是應用程序的終點。開發(fā)者也可以對“支架”進行修改,開發(fā)者依賴于“支架”生成器來產(chǎn)生創(chuàng)建,更新,刪除的功能。然后在保留這個“動作”時可以替換由生成器生成的行為。有時候當需要一個快速接口時,并且對界面要求不高,“支架”就足夠用了。

5)使用Rails的模型繼承

“模型”層是代碼與數(shù)據(jù)庫之間的守護者,應用程序訪問數(shù)據(jù)庫時沒做任何事,或者將數(shù)據(jù)存回到數(shù)據(jù)庫時也沒有通過“模型”。那么就把所有的確認工作放在模型里;不管數(shù)據(jù)的流向如何都不會有問題。如果在寫到數(shù)據(jù)庫之前,“模型”檢查它,就可以阻止損壞的數(shù)據(jù)到數(shù)據(jù)庫中。“模型”類的源代碼如下:(在app/models/good.rb內(nèi))

classGood<ActiveRecord::Base

End

看起來這什么都沒做,而數(shù)據(jù)庫映射、創(chuàng)建、更新、搜索等行為都被父類(ActiveRecord::Base,Rails的一部分)完成了。由于繼承的關系,Good類自然地繼承了所有父類的功能。

6)Rails的動態(tài)載入

在編輯完Good.rb文件后并沒有重啟應用程序來測試所做的修改——在開發(fā)模式中,Rails會注意到被修改的文件并重新加載它到應用程序中。

7)創(chuàng)建購物車模型

當用戶瀏覽訂餐系統(tǒng)的在線分類目錄時,他選擇要購買的商品,系統(tǒng)約定每個被選擇的產(chǎn)品應該被添加到客戶的虛擬購物車中,在有些時候,顧客會需要很多東西,并且他會給訂餐站點付款,為他購物車內(nèi)的商品付款。這意味著應用程序?qū)⑿枰3炙蓄櫩瓦x購到購物車內(nèi)的每個商品。

8)使用session功能

在瀏覽器與應用程序之間的協(xié)議是無狀態(tài)的——沒有內(nèi)建的記憶。當應用程序接受來自瀏覽器的一個請求時,就如同是第一次被訪問一樣,為了保存客戶已放入購物車中的商品信息,系統(tǒng)在Http“頭”上加上一些有狀態(tài)的事物。應用程序內(nèi)的某一層會試著對引入的請求,匹配它持有的本地“會話”數(shù)據(jù)部分。如果“會話”數(shù)據(jù)的特定部分匹配來自特定瀏覽器的全部請求,系統(tǒng)會保存使用“會話”數(shù)據(jù)瀏覽器的顧客買下的所有商品的軌跡。

9)定義數(shù)據(jù)表之間的關聯(lián)

訂單是一組商品項目,與購買交易的細節(jié)。假定系統(tǒng)中已經(jīng)有了商品項目,當創(chuàng)建新訂單時,它必然要和一個或多個商品項目聯(lián)系在一起。在數(shù)據(jù)庫中,這意味著系統(tǒng)需要從line_items(存放購物車中商品的信息)表到orders(訂單)表增加一個外鍵引用,所以在line_items表中定義外鍵:Constraintfk_items_goodforeignkey(good_id)referencesgood(id),constraintfk_items_orderforeignkey(order_id)referencesorders(id),這告訴數(shù)據(jù)庫外鍵的情況,因為許多數(shù)據(jù)庫都將檢查外鍵約束,以保持代碼的正確性。

10)定義模型之間的關系

系統(tǒng)中需要告訴Rails一個訂單有很多商品項目,并且一個商品項目屬于一個定單。在app/models目錄下新創(chuàng)建的order.rb(訂單模型)文件,添加一個對has_many()的調(diào)用。然后在line_item.rb(購物車信息模型)文件中添加belongs_to()方法的調(diào)用。

11)代碼重用

假設已經(jīng)有了一個有效的購物車,再創(chuàng)建一個新的order對象用來填充view。注意這個order還沒有保存到數(shù)據(jù)庫—它只是用view來組裝checkout(訂單信息表單)表單。可以在checkout頁增加購物車內(nèi)容的匯總。因為已經(jīng)有了購物車顯示頁面的代碼,接下來就可以使用Rails的componets來重用購物車的顯示代碼。

2.3網(wǎng)上訂餐系統(tǒng)的具體實現(xiàn)

1)創(chuàng)建數(shù)據(jù)庫和表

首先在Mysql下創(chuàng)建了數(shù)據(jù)庫mydatabase,接著建立orders表,如圖1所示。

圖1建立orders表

在這里,Rails使用一種命名習慣,表名都使用復數(shù)形式。Rails可以識別這些復數(shù)表名和控制器、模型、視圖之間的關系。Id屬于系統(tǒng)在表中查找數(shù)據(jù)所必須的主鍵,是整型,非空且自增的,user_name是用戶的名字,email是用戶的email地址,pay_type是用戶付款的方式,shipped_at是餐廳送出商品的時間,也就是交易完成的時間。

接下來修改config目錄下面的database.yml文件,實現(xiàn)系統(tǒng)功能時所要修改配置的地方僅此一處。修改后的結(jié)果如下所示:

development:

adapter:mysql

database:mydatabase

username:root

password:root

socket:/path/to/your/mysql.sock

其中development代表當前是處于開發(fā)模式中,database:mydatabase代表要連接的數(shù)據(jù)庫名,username和password分別為連接數(shù)據(jù)庫時所用到的用戶名和密碼。現(xiàn)在可以測試一下,打開命令行窗口輸入rubyscript/server命令,然后打開瀏覽器,在地址欄中輸入http://localhost:3000/order如圖2所示。

圖2listingorders的顯示結(jié)果

在這里每條記錄的修改、刪除和詳細信息的顯示功能都有了,而且擁有了新增記錄的功能。同理可以建立如下的幾張表和對應的控制器。經(jīng)過分析,系統(tǒng)現(xiàn)在需要一張商品表,一張用戶表。商品表用來存放網(wǎng)站所擁有的商品,用戶表用來存放本網(wǎng)站的合法使用用戶。按照同樣的步驟創(chuàng)建goods和users表。

goods表中存放原來選擇的食物列表,在設計中沒有使用blob類型的字段來存放真正的圖片,如果這樣做數(shù)據(jù)庫的規(guī)模會非常龐大,隨著圖片上傳的數(shù)量增大,數(shù)據(jù)庫的性能就可能會直線下降。在表中image_url中存放的是圖片的url地址,這個字段給ROR提供了一個圖片地址的映射。當視圖文件使用ERB和HTML語言填充頁面時,獲取圖片是通過對image_url的引用來實現(xiàn)的。

2)生成應用模板

Rails提供了很多的幫助方法和工具,scaffold工具就提供了生成Controller(控制器)、Model(模型)和View(視圖)的功能。

打開命令行窗口,進入應用程序目錄,在其中輸入rubyscript/generatescaffold控制器名,就會在views/控制器名目錄下生成views模板,包括new.rhtml、list.rhtml、show.rhtml、edit.rhtml和_form.rhtml五個視圖文件,分別為數(shù)據(jù)庫表的增刪改查頁面。系統(tǒng)中所用到的模板包括user、order和good三個,為了區(qū)分管理員和用戶的頁面,把good的list視圖又劃分為list_admin.rhtml和list_user.rhtml,然后對這些視圖文件進行編輯修改,來定制自己的模板,_form.rhtml中是定制提取表中數(shù)據(jù)列的格式。

3)商品管理的實現(xiàn)

圖3是管理員登錄時的界面。

圖3商品管理頁面

商品管理使用的Good_controller.rb中的部分代碼如下:

classGoodController<ApplicationController

//聲明GoodController繼承//ApplicationController

before_filter:authorize

model:cart//聲明包含cart模型類

attr_reader:name//聲明name屬性為可讀

defindex

@good=Good.avaliable_items

end

defshow_admin//顯示詳細信息

@good=Good.find(params[:id])

end

defshow_user

@good=Good.find(params[:id])

end

defnew//新建商品項

@good=Good.new

end

defcreate//生成商品記錄

@good=Good.new(params[:good])

if@good.save

flash[:notice]=''''食物記錄已成功創(chuàng)建.''''

redirect_to:action=>''''list_admin''''

else

render:action=>''''new''''

end

end

defedit//編輯商品信息

@good=Good.find(params[:id])

end

defupdate//修改已選中的數(shù)據(jù)

@good=Good.find(params[:id])

if@good.update_attributes(params[:good])

flash[:notice]=''''食物記錄已成功更新.''''

redirect_to:action=>''''show_admin'''',:id=>@good

else

render:action=>''''edit''''

end

end

defdestroy//刪除數(shù)據(jù)

……

4)訂單管理和查詢

管理頁面中的訂單查詢功能分為精確查找和模糊查找,精確查找是使用提交訂單的用戶名和送餐日期進行復合查詢。模糊查找只使用用戶名進行查詢。

訂單管理頁面提供該管理員有關訂單的詳細信息,送貨時間顯示完成交易的最終時間,沒有時間戳的訂單表示沒有送出商品,管理員只能對訂單進行刪除操作,用戶在結(jié)帳頁面中提交的訂單信息最終會匯集這里。管理員可以對待發(fā)送商品的訂單進行送貨操作,這時會在訂單的送貨時間列中加上一個時間戳。

5)購物車的實現(xiàn)(略)

3結(jié)論

網(wǎng)絡訂餐系統(tǒng)的開發(fā)證明,使用ROR來開發(fā)一個中小型的Web應用是非常快速和便捷的,它和J2EEWeb應用開發(fā)框架相比,開發(fā)復雜程序大大減低,也不用處處使用xml語法來對應用進行配置;但ROR基于許多約定和習慣來生成框架,而且對數(shù)據(jù)庫設計有一些特殊的要求,一旦要在不符合約定和習慣的舊有系統(tǒng)上進行更新設計,會使其快速開發(fā)的效率受較大的影響,這是需要ROR后續(xù)版本開發(fā)注意的方面。

參考文獻

[1]宋華,王佐成,汪林林.基于RoR框架的辦公自動化系統(tǒng)的設計研究,微型電腦應用,2007年11期

[2]陳鏘.RubyonRails與Struts在應用中的對比.科技資訊.2007年6期

[3]高昂.面向企業(yè)的RubyonRails.軟件世界.2007年23期

主站蜘蛛池模板: 浠水县| 青海省| 正蓝旗| 崇州市| 阳山县| 大英县| 二连浩特市| 贵南县| 璧山县| 宁河县| 平原县| 道孚县| 大理市| 临猗县| 阳西县| 会理县| 儋州市| 曲麻莱县| 东阳市| 金平| 大田县| 汉川市| 元阳县| 榆林市| 莫力| 襄樊市| 监利县| 常宁市| 安乡县| 清丰县| 桐柏县| 永定县| 盘山县| 北宁市| 太原市| 柯坪县| 渭源县| 内江市| 滨海县| 介休市| 南木林县|