22

是否有人可以在Ruby on Rails中以通俗的语言向我解释MVC。我特别感兴趣的是了解MVC中的Model(无法让我的头在模型中)。Ruby on Rails中的MVC是什么?

+0

见http://stackoverflow.com/questions/1242908/in-english-what-really-是模型 - 视图 - 控制器 – 2009-12-18 23:56:32

+0

@BillKarwin链接已不存在 – geoff 2014-07-20 04:34:52

回答

43

一些背景,MVC是一种(复合)设计模式,并于1979年由Trygve Reenskaug(Smalltalk)开发。

真MVC主要是计划用在n层(非网)系统,它分割一个系统为3个不同的部分,一个模型,视图和控制器

模型

  • 包含数据对于应用程序(通常链接到数据库)
  • 包含应用程序的状态(例如什么订单的客户拥有)
  • 包含所有的业务逻辑
  • 通知的状态变化的视图(**不是真的ROR的,见下文)
  • 的用户界面没有的知识,所以它可以重复使用

  • 生成数据呈现给用户
  • 被动的用户界面,即不做任何处理
  • 视图工作在数据显示给用户后完成。
  • 许多意见都可以访问同一型号不同的原因

的控制器

  • 接收事件来自外界的(通常是通过视图)
  • 互动与模型
  • 显示给用户适当的看法

** Classic MVC不适合Web应用程序,因为模型无法以观察者的方式将所有更改发送到视图(视图是网页)。 Model2是为了克服JSP团队在90年代不断变化的基础架构而推出的。 MVC Web框架实际上不是MVC,而是Model2(这在Ruby on Rails中也是如此)。

这里是GUI模式,包括MVC从主的描述,Martin Fowler的 GUI Architectures

我发现到目前为止是Agile Web Development with Rails的最好的书。它首先假定没有知识,并且相当全面。

希望这有助于为您揭开一些光芒!

+0

这是一件好事阅读有关MVC从它的创造者,然后认识到,它并没有真正适用于Web应用程序。你可以阅读更多的http://heim.ifi.uio.no/~trygver/2007/MVC_Originals.pdf – Theraot 2012-03-14 07:48:55

+0

这是一个很好的普遍的答案,但没有涉及到Ruby on Rails的明确。请参阅此链接更好的答案:http://www.tutorialspoint.com/ruby-on-rails/rails-framework.htm – 2014-03-21 15:31:17

+0

Ruby on Rails的没有“视图”和“控制器”之间的任何真正的分离。视图在控制器的上下文中执行,实际上与控制器代码相同(语法不同)。这就是为什么'@ var'总是起作用的原因,并且与许多其他框架明显不同,在这些框架中Views完全独立于控制器执行。 – Carpetsmoker 2016-03-06 17:27:39

3

你的模型是你的程序使用的数据结构。

视图是与屏幕或下一级交互的部分。

的控制器通常处理模型和视图之间的数据

MVC结构经常嵌套,所以一个“模型”或“查看”可能含有自己的MVC(想想在屏幕上的组件。你可能只是用一个字符串填充它,但在幕后,组件的代码绘制它自己的小视图,它有自己的小模型(您传递的字符串),并有一个小控制器将数据绘制到视图上。 Rails,模型,视图和控制器的角色都是由框架定义的,任何教程都会指导这三个组件,因为它会引导您通过它创建的文件。

在其他系统中,这些碎片可能难以识别。此外,MVC不是“完美”,只要记住有有效的选择,但它是一个开始组织的好方法。

1

MVC并不仅仅针对Ruby on Rails。在Ruby on Rails出现之前,它实际上已经创建了一段时间。它主要只是一种组织代码的方式,以便您拥有一些负责模型的代码(数据库表的Class版本),一些负责视图(视觉上向用户显示的内容)的代码以及负责任的代码对于你的控制器来说(把视图和模型联系在一起并执行你的大部分逻辑)

这是非特定于框架的描述每个使用MVC的框架都有不同的实现方式对于Ruby on Rails模型将数据库表格表示为一个类,它可以直接在代码中与其他对象进行通信,而无需编写任何SQL。所有的SQL都在后台进行处理,您只需将它看作是一个普通的类(几乎没有,但它不是无缝的),该视图主要是HTML,代表了将发送给浏览器的内容呃只是将模型和视图一起传递的代码。

总而言之,MVC并不仅限于Ruby on Rails ......这只是最受欢迎的。

0

Ruby on Rails没有实现MVC设计模式。 Ruby on Rails具有名为控制器,模型和视图的文件夹。视图文件夹包含HTML文件。控制器和模型文件夹具有ruby文件。控制器映射到一个URL,并在请求该URL时执行控制器中的一个方法,关联的视图(HTML文件)被加载,并使用它的模型(数据结构)填充视图。那就是它与MVC设计模式的相似程度。人们说它是MVC是一种耻辱,因为它引起了一代人对MVC设计模式的混淆和误解。

在Rails中,模型是一个数据结构。

2

enter image description here

MVC基本上表明模型 - 视图 - 控制器。并使用如PHP,Perl和Python的等许多语言MVC一般MVC是这样工作的:

请求首先到达控制器,控制器发现和适当的视图,并与模型交互,模型与数据库进行交互,发送响应到控制器,然后控制器根据响应给出输出参数进行查看。

+0

有一件事让我很烦这些图表是,它并没有真正做到公正在解释模型如何视图和控制器之间传递。它看起来好像模型是一个独立的实体,但它实际上是在视图和控制器之间传递的数据包。控制器*技术上*控制在服务器上的模型上发生的事情;在这种情况下从数据库加载数据。该图表看起来像模型负责这个(有逻辑来做这件事),当真正的控制器打这个电话。 – 2016-01-21 01:18:57

0

这里是在较高的水平上MVC模式是如何工作的简要概述:

控制器:

  1. 侦听在某种交互/事件流中。
  2. 控制器可以发送交互/事件类型的模型。
  3. 控制器也可以与视图进行通信。

型号:

  1. 模型将侦听在来自控制器的交互/事件。
  2. 是数据源的抽象。
  3. 处理数据逻辑和操作。
  4. 完成逻辑处理后,它会发送给控制器,然后与控制器进行通信。

检视:

  1. 视图可以与控制器通信。
  2. 了解如何以可视方式将数据从模型渲染到浏览器。
  3. 控制器告诉查看使用 模型中的某些内容进行操作。

几件事情要注意的是车型不能与意见直接通信,反之亦然。只有控制器可以与视图和模型进行通信,因此控制器充当从浏览器上的用户交互中检索到的交互/事件的委托人。

check this link for more clear understanding

one more link to get clear

1

模型视图控制器原理划分应用程序的工作分成3个独立又密切合作子系统。

模型(ActiveRecord的):

它保持了对象和数据库之间的关系,处理验证,关联交易等。

该子系统在ActiveRecord库中实现,该库提供关系数据库中的表与用于处理数据库记录的Ruby程序代码之间的接口和绑定。 Ruby方法名称是从数据库表的字段名称自动生成的。

视图(的ActionView):

它是数据的特定格式的演示,由控制器决定显示数据触发。它们是基于脚本的模板系统,如JSP,ASP,PHP,并且很容易与AJAX技术集成。

该子系统中的ActionView库,它是定义用于数据呈现的演示模板嵌入的红宝石(ERB)的系统来实现。每个到Rails应用程序的Web连接都会导致显示一个视图。

控制器(ActionController的):

在应用程序内的设施,指挥交通,在一方面,查询具体的数据模型,而在另一方面,组织数据(搜索,排序,发送消息)转换成适合特定视图需求的表单。

该子系统中的ActionController,这是一个数据经纪人的ActiveRecord(数据库接口)和的ActionView(呈现引擎)之间坐在实现。

检查下面的链接,MVC了然于导轨:

http://www.bogotobogo.com/RubyOnRails/RubyOnRails_Model_View_Controller_MVC.php

https://betterexplained.com/articles/intermediate-rails-understanding-models-views-and-controllers/

+0

感谢您投我的答案 – vinoth 2017-06-29 12:48:17

相关问题