Agile Web Development with Rails 翻译(二)

Agile Web Development with Rails 翻译(二)

第二章 Rails应用程序的体系

 

在你构造你的Web应用程序时,Rails引进了一些合理的约束。令人惊讶的是这些约束反而使创建应用程序更容易。让我们看看这是为什么。

 

 

 

 

2006年4月16日更新

 

 


2.1 模型, 视图, 和 控制器

 

回到1979年,Trygve Reenskaug为开发交互式应用程序提出了一个新的体系。在他的设计中,应用程序被分解成三个组成部分:model(模型)view(视图),和controller(控制器)

“模型”的作用是管理应用程序的状态。有时候,这个状态是短暂的,用于保持交互用户间的联系。有时候这个状态是持久的,它将被存储到外部应用程序,通常是到数据库中。

“模型”主要是数据;它给这些数据的应用强加所有商业规则。例如,如果小于20美元的商品没有折扣,则“模型”会强制执行这个约束。可以想到只要把这些商业规则的实现放入到“模型”内就可以了,并且我们要确保在应用程序内没有什么东西会让我们的数据失效。“模型”的行为看起来即像个守护也像个数据仓库。

“视图”用于生成用户界面,通常是建立在“模型”内的数据上的。例如,一个在线商店将有产生清单显示在分类屏幕内。这个清单通过“模型”来访问,但它是个“视图”,因为它从“模型”中访问数据,并在格式化之后显示给用户。虽然“视图”可以以各种方式将输入的数据呈现给用户,但是“视图”本身却从不处理数据。“视图”的工作只是显示数据。它可以基于不同的目的,以多种界面来访问同一“模型”的数据。对于在线商店来说,会在一个分类页面显示产品信息界面,而其它界面则可能是用来给管理员添加和编辑产品的。

“控制器”用于为应用程序谱曲。“控制器”接受外部世界(通常是用户输入)的事件,与“模型”相互作用,并显示应用程序“视图”给用户。

这是个三人政治“模型,视图,控制器”形成了众所周知的体系MVC。图2.1显示了被抽象化的MVC

 

MVC原是用于传统的GUI应用程序的,此处的开发者发现关系的分离会减少耦合,它们会使代码更易写和维护。每个概念或行为只出现在一个地方。使用MVC就像在用现在钢梁构造摩天大楼它可容易地用现有结构来替换余下部分。

在软件世界里,我们通常会忽略好的思想。当开发者首先开始制做Web应用程序时,它们想的是写那种集成式的程序,混杂有表示数据访问,商业逻辑,和事件控制的一大堆代码。过去的思想总会有时慢慢地走回来,有些人开始用20年前MVC思想来检验Web应用程序体系。结果是我们看到了框架如,WebObjectsStructs,和JavaServer Faces。所有这些都是基于MVC思想的。

Ruby on Rails也是个MVC框架。Rails强制一个结构给你的应用程序,在这个结构中你可以配置“模型”,“视图”,和“控制器”每个单独部分的功能在你的应用程序运行时,框架会将它们组织在一起。让人高兴的是,框架的组织过程是缺省的,所以你不需要写任何配置元数据来协调它们的工作。这是Rails的配置约定的一个例子。

Rails应用程序中,请求首先被发送给一个“路由器”,它的工作是将应用程序内的请求发送,并将请求本身进行解析。最后,这个阶段会识别“控制器”代码内某处的一个特定方法(调用Rails内的一个“动作”)。这个“动作”可查看请求者本身的数据,它会与“模型”交互,然后,它引发被调用的其它“动作”。最后,“动作”准备发送信息给“视图”,来显示一些东西给用户。

下面的图2.2显示了Rails如何处理一个新到的请求。在这个例子中,假设应用程序先前显示的是产品分类页面,用户按下了”Add To Cart”按钮来到下一个产品。这个按钮使用的URL http://my.url/store/add_to_cart/123链接到我们的应用程序,其中123是我们的内部id,它用于选择产品。[本书稍后会转换Rails URL的格式。但是,仍应该提到的是,URL完成的动作如,”add to cart”可能是危险的。参考16.9节,有关GET请求问题的更多细节在324页。]

 

 

 

“路由器”组件接收新到请求,并立即进行挑选。简单情况下,它挑选路径的第一个部分,store,做为“控制器”的名字,和第二个部分,add_to_cart,做为一个“动作”的名字。路径的最后部分,123,被约定是名为id的内部参数。通过这个分析的结果,“路由器”知道它必须调用“控制器”类StoreController(我们在180页会谈到命名习惯)内的add_to_cart()方法。

方法add_to_cart()处理用户请求。在这个例子中,它发现了当前用户的购物车(它是由“模型”管理的一个对象)。然后它请求这个方法查找有关产品123的信息。然后它告诉购物车给自己添加这个产品。(看看“模型”如何使用保存的所有商业数据;“控制器”告诉它如何做,然后“模型”就知道该如何做了。)

现在,购物车包含了新的产品,我们可以显示它给用户。“控制器”排列“视图”要从“模型”内访问的购物车对象,然后启动“视图”代码。在Rails中,这个启动的过程是在暗中完成的;依靠约定的帮助来将一个给定的“动作”与一个特定的“视图”连结起来。

这是一个MVC Web应用程序的所有部分。通过适当地集中和划分你的功能,你会现你的代码变得易于工作,你的应用程序变得易于扩展和管理。这可是个好生意。

如果MVC可以解决这么多问题,那么你应该需要一个框架如,Ruby on Rails。回答很肯定:Rails为你处理所有低级的管理你可以与所有些细节的处理说拜拜了这会让你只关注于你的应用程序的代码功能。让我们看看如何….

 

 

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我! 基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip基于Django+python编写开发的毕业生就业管理系统支持学生教师角色+db数据库(毕业设计新项目).zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值