【问题标题】:What is MVC in Ruby on Rails?Ruby on Rails 中的 MVC 是什么?
【发布时间】:2010-12-28 05:30:16
【问题描述】:

谁能用 Ruby on Rails 用外行的方式向我解释 MVC。我对理解 MVC 中的模型特别感兴趣(无法理解模型)。

【问题讨论】:

    标签: ruby-on-rails model-view-controller design-patterns architecture


    【解决方案1】:

    我认为了解 MVC 的最佳方式是通过示例。尝试使用 MVC 编写一个简单的 Rails 应用程序。网上有很多教程,比如the blog example at "Getting Started with Rails"

    如果选择通过编写示例来学习,请查看Where can I find clear examples of MVC?的答案

    【讨论】:

      【解决方案2】:

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

      视图是与屏幕交互的部分或上一层。

      Controller 一般处理模型和视图之间的数据

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        总而言之,MVC 不仅仅针对 Ruby on Rails……它只是最流行的。

        【讨论】:

          【解决方案4】:

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

          真正的 MVC 最初计划用于 n 层(非 Web)系统,它将系统拆分为 3 个不同的部分,即模型、视图和控制器

          模型

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

          观点

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

          控制器

          • 接收来自外部世界的事件(通常通过视图)
          • 与模型交互
          • 向用户显示适当的视图

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

          这里是来自大师 Martin Fowler 对包括 MVC 在内的 GUI 模式的描述 GUI Architectures

          到目前为止我找到的最好的书是Agile Web Development with Rails。它从假设没有知识开始,并且非常全面。

          希望这对您有所帮助!

          【讨论】:

          • 从它的创建者那里阅读 MVC 总是很好的,然后认识到它并不真正适用于 Web 应用程序。你可以阅读更多heim.ifi.uio.no/~trygver/2007/MVC_Originals.pdf
          • 这是一个很好的通用答案,但与 Ruby on Rails 无关。请参阅此链接以获得更好的答案:tutorialspoint.com/ruby-on-rails/rails-framework.htm
          • Ruby on Rails 在“视图”和“控制器”之间没有任何真正的分离。视图在控制器的上下文中执行,并且实际上与控制器代码相同(除了语法不同)。这就是为什么@var 总是有效的原因,并且与许多其他框架明显不同,在这些框架中,视图的执行与控制器完全分开。
          【解决方案5】:

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

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

          【讨论】:

            【解决方案6】:

            MVC 基本上表示模型-视图-控制器。并且 MVC 被 PHP、Perl、Python 等许多语言使用。通常 MVC 是这样工作的:

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

            【讨论】:

            • 这些图表让我很恼火的一点是,它在解释模型如何在视图和控制器之间传递时并不公平。它看起来好像模型是一个单独的实体,但它实际上是在视图和控制器之间传递的数据包。控制器技术上控制服务器上模型发生的事情;在这种情况下,从数据库加载数据。当控制器真正发出这个调用时,图表看起来像是模型负责这个(有逻辑这样做)。
            【解决方案7】:

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

            控制器:

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

            型号:

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

            查看:

            1. View 可以与控制器通信。
            2. 知道如何将数据从模型以可视方式呈现到浏览器。
            3. Controller 告诉 View 使用来自 型号。

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

            check this link for more clear understanding

            one more link to get clear

            【讨论】:

              【解决方案8】:

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

              模型(ActiveRecord):

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

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

              视图(ActionView):

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

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

              控制器(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/

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2010-09-15
                • 2018-11-20
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多