免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3608 | 回复: 1
打印 上一主题 下一主题

Ruby on Rails也是一个MVC框架 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-10 10:41 |只看该作者 |倒序浏览
Ruby on Rails也是一个MVC框架





回想1979年,Trygve Reenskaug提出了一种开发交互式应用的全新架构。在他的设计方案中,应用程序被分为三类组件:模型、视图,以及控制器。

    模型(model)负责维持应用程序的状态。模型携带数据,但又不止是数据,它还负责执行施加于这些数据之上的业务过则。

    视图(view)负责生成用户界面——通常会根据模型中的数据来生成。

    控制器(controller)负责协调整个应用程序的运转。接收外界的事件,与模型交互,并将视图展示给用户。

    这个三位一体的组合——模型、视图和控制器——构成了一个架构模式,那就是著名的MVC。

    Ruby on Rails也是一个MVC框架。Rails强迫你将应用程序按照模型、视图和控制器进行划分,并遵循这一结构分别开发各部分的功能。当程序运行时,Rails会把各个部分组装在一起。Rails的有趣之处在于:“组装”的过程默认地按照人们常用的命名惯例来进行,因此,一般情况下你不需要编写任何外部的元数据配置信息。这正是Rails一以贯之的“惯例重于配置”观念的体现。

    在一个Rails应用程序中,进入的请求首先被发送给一个路由组件,该组件判断应该将请求发送到应用程序的什么部分、如何解析这一请求。这一阶段将找出控制器代码中的某个特定方法,要求它来处理请求(用Rails的行话,这个方法叫做“action”)。action可以查阅请求中携带的数据,可以与模型交互,也可以调用别的action。最后,action会为视图准备充分的信息,视图则将所需的信息展现给用户。

    下图展示了Rails处理一个请求的全过程。在这个例子中,我们假设应用程序已经向用户展现了一个“产品分类列表”页面,用户则点击了某个产品旁边的Add To Cart(“放进购物车”)按钮。这个按钮链接到我们的应用程序,URL是http://my.url/store/add_to_cart/123,其中的“123”是所选商品的系统内部ID号。




路由组件收到来自外部的请求之后,立即将其拆成小块。简单来说,它把路径的第1部分(“store”)看做控制器的名称,第2部分(“add_to_cart”)看做action的名称,最后一部分(“123”)则按照惯例被放入一个名为“id”的内部参数。进行这样的分析之后,路由组件就知道:应该调用StoreController这个控制器类中的add_to_cart()方法。

    add_to_cart方法会处理用户的请求:找到当前用户的购物车(这也是由模型惯例的一个对象),请求模型找到编号为123的商品信息,然后告诉购物车将该商品加入其中(请注意模型是如何跟踪所有业务数据的:控制器只是告诉它做什么,而模型自己知道该怎么做)。

    现在,购物车中已经放入用户选择的商品,我们需要将这一事实展现给用户看。控制器会安排视图访问模型中的购物车对象,并调用视图代码使之呈现在用户眼前——在Rails中,这一调用通常都是隐藏在幕后进行的。对于特定的action,Rails将根据命名惯例自动为其查找一个特定的视图。

    这就是一个MVC web应用的全部家当了。只要遵循一定的命名惯例,并且合理划分功能,你会发现编写代码边的轻松愉快,你的应用程序会更具扩展性、可维护性。

    如果MVC仅仅是“以某种方式划分代码”的话,你可能会想,那还要Ruby on Rails这样的框架干什么?答案很简单:Rails帮你搞定了所有低级的基础代码——所有那些需要耗费你大把时间去处理的繁琐细节。它让你能够专注于应用程序的核心功能。


转:Ruby on Rails 学习网

论坛徽章:
0
2 [报告]
发表于 2011-01-14 16:09 |只看该作者
RoR的MVC,是其标志性特性。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP