什么是Ruby on Rails中的MVC?

有人可以用Ruby on Rails的方式向我解释MVC。 我对理解MVC中的模型特别感兴趣(无法理解模型)。

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

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

该模型

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

风景

  • 生成向用户显示数据的用户界面
  • 被动,即不做任何处理
  • 一旦向用户显示数据,就完成视图工作。
  • 许多视图可以出于不同的原因访问同一模型

控制器

  • 接收来自外部世界的事件(通常通过视图)
  • 与模型互动
  • 显示用户的相应视图

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

以下是GUI模式的描述,包括来自Master的MVC,Martin Fowler GUI Architectures

到目前为止,我发现的最好的书是带有Rails的敏捷Web开发 。 它首先假设没有知识,而且非常全面。

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

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

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

Controller通常处理模型和视图之间的数据

MVC结构通常是嵌套的,因此“模型”或“视图”可能包含自己的MVC(想想屏幕上的组件。您可能只是用字符串填充它,但在幕后,组件的代码自己绘制小视图,它有自己的小模型(传入的字符串),并有一个小控制器将数据绘制到视图上。

在Rails中,模型,视图和控制器的角色由框架很好地定义,任何教程都会指出这三个组件,因为它会引导您完成它创建的文件。

在其他系统中,这些部分可能更难识别。 此外,MVC不是“完美”,只要记住有有效的替代品,但这是一个开始组织的好方法。

在此处输入图像描述

MVC基本上表示模型 – 视图 – 控制器。 并且MVC被许多语言使用,如PHP,Perl,Python等。通常MVC的工作方式如下:

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

我认为围绕MVC的最佳方式就是举例。 尝试使用MVC编写一个简单的Rails应用程序。 在线有很多教程,比如“Rails入门”中的博客示例 。

如果选择通过编写示例来学习,请查看我在哪里可以找到MVC的明确示例的答案?

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

这是非框架特定的描述。 使用MVC的每个框架都有不同的实现方式。 对于Ruby on Rails,每个模型将数据库表表示为一个类,它可以直接在代码中与其他对象进行通信,而无需编写任何SQL。 所有的SQL都在后台处理,你只需要把它想象成一个普通的类(差不多,它还不是无缝的)。 该视图主要是HTML,表示将发送到浏览器的内容。 控制器只是将模型和视图通信的代码。

总而言之,MVC并不仅仅针对Ruby on Rails ……这是最受欢迎的。

模型视图控制器原理将应用程序的工作划分为3个独立但紧密协作的子系统。

型号(ActiveRecord):

它维护对象和数据库之间的关系,并处理validation,关联,事务等。

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

查看(ActionView):

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

该子系统在ActionView库中实现,ActionView库是一个基于嵌入式Ruby(ERb)的系统,用于定义数据表示的表示模板。 与Rails应用程序的每个Web连接都会导致显示视图。

Controller(ActionController):

引导流量的应用程序中的工具,一方面查询模型以查找特定数据,另一方面,将数据(搜索,排序,消息传递)组织成适合给定视图需求的forms。

该子系统在ActionController中实现,ActionController是位于ActiveRecord(数据库接口)和ActionView(表示引擎)之间的数据代理。

检查下面的链接,以便清楚地了解rails中的mvc:

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

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

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

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

以下是关于MVC模式如何工作的高级概述:

控制器:

  1. 收听某种互动/事件流。
  2. 控制器可以发送该类型的交互/事件的模型。
  3. 控制器还可以与视图通信。

模型:

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

视图:

  1. View可以与控制器通信。
  2. 了解如何将模型中的数据直观地呈现给浏览器。
  3. Controller告诉View使用Model中的某些东西做一些事情。

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

查看此链接以获得更清晰的理解

还有一个链接要清楚