Rails系列教程(2):Models, Views, and Controllers
上一篇 /
下一篇 2008-02-02 15:41:32
/ 个人分类:RoR
一个应用(application)可以被拆分为3部分:
1.models
用于维护 the state of the application,通常我们可以理解 states 就是数据,这个概念和OO编程中的states相似,一种维护state的途径就是通过一定规则存取(access)数据通过数据库(database)。注意我们这里说的是维护,不是存取,因为,通常的数据处理过程并没有我们想象的那么简单,并不是取钱以后就减去相应金额,因为我们要保持余额大于0,这就产生了一条Rule,所以models应该是:
models用于存取数据(从某种介质里存取,比如databases) |
models用于约束数据(通过某种规则约束,比如商业规则) |
2.views
用于产生(generate)user interface,经常我们会把views和models结合起来,views的界面信息,部分基于models,注意,views是不处理数据的,只是呈现数据给用户,当然实际上,我们可能会用一些语言比如:javascrpit来约束数据,因此实际应用中,并不会这么死死的遵循MVC的规范。views和models并不是一一对应的关系,这对我们理解编写rails applications有重要的影响,比如一个views可能对应很多的models,就像一个网站的首页一样,会在很多tables里面调用信息,再如一个models可能对应很多的views,也就是说,一个models可能在一个页面显示,也可以在其他页面显示一样。这是灵活的
3.controllers
作为views和models的连接体,可以认为controllers是分治哲学里面的"治",可以认为controllers是一个乐队的指挥一样,协调MV工作
MVC图解:
*大家仔细看,会发现view和model间使用虚线,说明什么问题?说明view和model是不能直接通讯的,必须通过controller作为中间体
MVC不仅仅是用于web的一个architecture,而是可以用于所有的applications,而且事实上MVC最早是用于GUI applications
我们为什么要用MVC,即使不用MVC,特别在GUI applications,假如你仅仅做一些小型的applications,估计你根本不会去用,甚至很多人也不懂MVC,那为什么要用MVC?MVC可以使得程序更容易编写和维护,rails就使用MVC,使得程序非常容易编写。其实除了rails很多architectures比如:WebObjects, Struts, and JavaServer Faces都是用用MVC
Rails architecture:
外来的requests首先被发送到一个router,router首先解析requests,然后解决requests将被发送到什么地方的问题,这时候一个叫action的特殊method来控制requests的去向,action位于controllers,action着眼于requests的data,action可能和models互交,也可能调用其他的actions,或者影响views的表现,过程如图:
为了说明问题,我们来看URLhttp://my.url/store/add_to_cart/123
store : controller的名字
add_to_cart : action的名字
其他部分我们不用详细的追究它们的含义,而且过早的了解,也只能带来疑惑。这里强调一下URL,注意的是my.url后面第一个一定是controller name,而第二个一定是action name。
因为URL的关系,router在接受requests的时候他会知道action在哪里,因为URL被规范了,所以上例中router很清楚的知道,request要被传递到StoreController这个class里面的add_to_cart这个action里,分析URL的过程就是我们前面说过的router工作之一,对requests的解析问题,解析完成,就需要把requests的相关内容传递到action里面,action在选择处理的方式,即前面提到的3种处理。注意到这里有些语句是含糊的,因为现在的知识不能让我们马上铺开全局进行讲解,这里只是描绘大概的轮廓,以便以后了解细节做好准备
收藏
举报
TAG:
RoR