摘 要 本文对最新Web应用开发框架Ruby On Rails的工作原理做了简单介绍,讨论了构建一个基于ROR的Web应用的实现方法和所用到的技术,并基于ROR开发了一个网络订餐系统。
关键词 Rails;MVC;订餐系统;Web
1 引言
ROR是Ruby On Rails的英文简称,ROR是指使用 Ruby语言实现的Rails Web开发框架。Ruby是一种功能强大的面向对象的、解释型的脚本语言。Ruby语言具有下面几个特点: 语法简单、纯面向对象语言、提供动态对象能力、使用单继承机制、操作符重载、迭代器和闭包、垃圾回收、错误处理功能、拥有独立于操作系统的线程机制、可移植性高。 Ruby on Rails 是一个使用纯Ruby语言编写的、实现了MVC模型的、易于开发、配置和管理的Web应用程序的框架。Rails的设计思想由一组关键的概念来驱动:低重复(DRY)、约定优于配置、快速Web开发框架、对数据库访问的支持。 将(模型-视图-控制器)MVC模型用于软件设计中可以使应用程序的构造更加清晰。Rails是一个MVC框架。使用Rails开发应用时,每个代码以及应用程序的每个部分都遵循标准的方式。也就是说,是在一个被事先准备好的框架内开始应用程序设计的。Rails应用程序是由模块化的、面向对象的脚本语言Ruby写成的,这些模块之间的相互链接和关系驱动着MVC模型的运行。 ROR这些特点也使它逐步从一个开源和个人的Web开发框架走向主流,在诸多Web开发框架中以其鲜明的特色占据了一席之地。2007年12月6曰,ROR2.0发布,进一步强化了对企业应用的支持。2 系统分析与设计
2.1 功能描述
基于ROR在开发应用上的诸多优势,本文使用ROR开发了一个小型的网络订餐系统,根据客户要求,该系统应具备下列主要功能: (1)向注册的客户提供可预订商品的列表和详细信息,供客户选择。这些信息的维护由系统管理员进行。 (2)向客户提供一个订单提交、浏览和处理界面,实现购物车形式的订餐功能。 (3)提供用户资料的管理功能,包括增加、删除和信息修改。 (4)提供用户登录和权限控制功能,将为普通用户和系统管理员提供不同的界面。 (5)提供商品和订单信息的查询功能、统计功能和打印功能。 系统选用数据库作为后台数据库,运行环境为:Windows 2000 Server、Ruby 1.8.4、Rails 1.0、MySQL 5.0。2.2 使用ROR实现订餐系统的技术路线
1)将需求模块化 设计中将以递增式开发这个应用程序,首先使用Rails立即创建具有一些功能的简单应用myMealOrder。 系统中开始只区分两种不同的角色:买方和卖方。买方使用myMealOrder来浏览站点可以出售的商品,选择商品并创建一个订单。卖方使用myMealOrder来管理用于出售商品的列表,并等待处理订单,然后将订单发货。 考虑到用户需要选择多项商品,系统中需要有地方保存用户添加的产品列表的,所以在设计中添加了一个购物车。 2)使用Rails的“支架” 论文检测天使-免费论文检测软件http://www.jiancetianshi.com第一个任务是创建Web接口来管理系统中的商品信息---包括创建商品信息,编辑现有商品,查看已有的商品信息,删除不需要的商品。为了实现以上功能,在数据库中应当建立几张表,使用Rails “支架”来自动生成最初的代码,这也是Rails具有敏捷性开发效率的一个原因。 Rails“支架”是为管理一个“模型”而自动创建的一个框架。当运行“生成器”时,告诉它需要“支架”来生成一个特殊的“模型”(由“支架”创建的),并且需要通过给定的“控制器”(也是由“支架”创建的)来访问它。在Rails中,“模型”被自动地映射到使用“模型”的类的名字的复数形式的数据库表。在应用程序中,根据需要要求有一个名为good的“模型”,所以Rails将它与叫goods的表关联起来。 Rails是如何找到这个表的呢?在config/database.yml中设置development条目时,就已经告诉Rails在哪儿找数据库的表了。当启动应用程序时,“模型”检查数据库内的表,处理它要得到的列,然后创建数据库表和Ruby对象之间的映射。通过“支架”表单“生成器”可以向“模型”要求有关表的字段信息,然后就使用它找到的字段来创建一个合适的html表单。 3)使用Rails的“控制器” “控制器”处理来自浏览器的“请求”,一个应用程序可以有多个“控制器”。对于本次设计的myMealOrder应用程序来说,最终会有四个“控制器”,一个用于处理商品资料,一个用于处理定单信息,一个用于用户资料,一个用于登录管理。 4)在生成的源码基础上根据需要修改代码 scaffold工具所生成的Rails“支架”使用Ruby代码来组装应用程序目录树。这个目录树表达了一个完整的应用程序构架—它的内部已经放置了Ruby代码;这些都是源代码,而不是简单地对一些标准库的调用。这意味着可以修改“支架”内产生的代码,“支架”是作为一个应用程序的起点,而不是应用程序的终点。开发者也可以对“支架”进行修改,开发者依赖于“支架”生成器来产生创建,更新,删除的功能。然后在保留这个“动作”时可以替换由生成器生成的行为。有时候当需要一个快速接口时,并且对界面要求不高,“支架”就足够用了。 5)使用Rails的模型继承 “模型”层是代码与数据库之间的守护者,应用程序访问数据库时没做任何事,或者将数据存回到数据库时也没有通过“模型”。那么就把所有的确认工作放在模型里;不管数据的流向如何都不会有问题。如果在写到数据库之前,“模型”检查它,就可以阻止损坏的数据到数据库中。“模型”类的源代码如下:(在app/models/good.rb内)class Good<ActiveRecord::BaseEnd 看起来这什么都没做,而数据库映射、创建、更新、搜索等行为都被父类(ActiveRecord::Base,Rails的一部分)完成了。由于继承的关系,Good类自然地继承了所有父类的功能。 6)Rails的动态载入 在编辑完Good.rb文件后并没有重启应用程序来测试所做的修改——在开发模式中,Rails会注意到被修改的文件并重新加载它到应用程序中。 7)创建购物车模型 当用户浏览订餐系统的在线分类目录时,他选择要购买的商品,系统约定每个被选择的产品应该被添加到客户的虚拟购物车中,在有些时候,顾客会需要很多东西,并且他会给订餐站点付款,为他购物车内的商品付款。这意味着应用程序将需要保持所有顾客选购到购物车内的每个商品。 8)使用session功能 在浏览器与应用程序之间的协议是无状态的——没有内建的记忆。当应用程序接受来自浏览器的一个请求时,就如同是 论文检测天使-免费论文检测软件http://www.jiancetianshi.com
第一次被访问一样,为了保存客户已放入购物车中的商品信息,系统在Http“头”上加上一些有状态的事物。应用程序内的某一层会试着对引入的请求,匹配它持有的本地“会话”数据部分。如果“会话”数据的特定部分匹配来自特定浏览器的全部请求,系统会保存使用“会话”数据浏览器的顾客买下的所有商品的轨迹。 9)定义数据表之间的关联 订单是一组商品项目,与购买交易的细节。假定系统中已经有了商品项目,当创建新订单时,它必然要和一个或多个商品项目联系在一起。在数据库中,这意味着系统需要从line_items(存放购物车中商品的信息)表到orders(订单)表增加一个外键引用,所以在line_items表中定义外键:Constraint fk_items_good foreign key(good_id) references good(id),constraint fk_items_order foreign key(order_id)references orders(id),这告诉数据库外键的情况,因为许多数据库都将检查外键约束,以保持代码的正确性。 10)定义模型之间的关系 系统中需要告诉Rails一个订单有很多商品项目,并且一个商品项目属于一个定单。在app/models目录下新创建的order.rb(订单模型)文件,添加一个对has_many()的调用。然后在line_item.rb(购物车信息模型)文件中添加belongs_to()方法的调用。 11)代码重用 假设已经有了一个有效的购物车,再创建一个新的order对象用来填充view。注意这个order还没有保存到数据库—它只是用view来组装checkout(订单信息表单)表单。可以在checkout页增加购物车内容的汇总。因为已经有了购物车显示页面的代码,接下来就可以使用Rails的componets来重用购物车的显示代码。
2.3 网上订餐系统的具体实现
1)创建数据库和表 首先在Mysql下创建了数据库mydatabase,接着建立orders表,如图1所示。 图1 建立orders表 在这里,Rails使用一种命名习惯,表名都使用复数形式。Rails可以识别这些复数表名和控制器、模型、视图之间的关系。Id属于系统在表中查找数据所必须的主键,是整型,非空且自增的,user_name是用户的名字,email是用户的email地址,pay_type是用户付款的方式,shipped_at是餐厅送出商品的时间,也就是交易完成的时间。 接下来修改config目录下面的database.yml文件,实现系统功能时所要修改配置的地方仅此一处。修改后的结果如下所示: development: adapter: mysql database: mydatabase username: root password: root socket: /path/to/your/mysql.sock其中development代表当前是处于开发模式中,database:mydatabase代表要连接的数据库名,username和password分别为连接数据库时所用到的用户名和密码。现在可以测试一下,打开命令行窗口输入ruby script/server命令,然后打开浏览器,在地址栏中输入http://localhost:3000/order 如图2所示。图2 listing orders的显示结果
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr /> 在这里每条记录的修改、删除和详细信息的显示功能都有了,而且拥有了新增记录的功能。同理可以建立如下的几张表和对应的控制器。经过分析,系统现在需要一张商品表,一张用户表。商品表用来存放网站所拥有的商品,用户表用来存放本网站的合法使用用户。按照同样的步骤创建goods和users表。
3 结论
网络订餐系统的开发证明,使用ROR来开发一个中小型的Web应用是非常快速和便捷的,它和J2EE Web应用开发框架相比,开发复杂程序大大减低,也不用处处使用xml语法来对应用进行配置;但ROR基于许多约定和习惯来生成框架,而且对数据库设计有一些特殊的要求,一旦要在不符合约定和习惯的旧有系统上进行更新设计,会使其快速开发的效率受较大的影响,这是需要ROR后续版本开发注意的方面。参考文献
[1]宋华,王佐成,汪林林.基于RoR框架的办公自动化系统的设计研究,微型电脑应用,2007年 11期[2]陈锵.Ruby on Rails与Struts在应用中的对比.科技资讯. 2007年6期[3]高昂.面向企业的Ruby on Rails.软件世界.2007年 23期
[8]电大学习网.免费论文网[EB/OL]. /d/file/p/2024/0424/fontbr />
相关文章:
数字农业时空信息管理平台04-26
基于Verilog HDL的模型优化04-26
单点登录系统集成应用子系统的方法探讨04-26
基于Windows XP的PVM的实现04-26
基于J2EE的手机短信平台的设计与实现04-26
类分裂的代码混淆技术04-26
ORACLE中SQL查询优化研究04-26
高校学生奖励与资助系统的设计04-26
高校信息查询系统的设计与实现04-26