是否有人可以在Ruby on Rails中以通俗的语言向我解释MVC。我特别感兴趣的是了解MVC中的Model(无法让我的头在模型中)。Ruby on Rails中的MVC是什么?
回答
一些背景,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的最好的书。它首先假定没有知识,并且相当全面。
希望这有助于为您揭开一些光芒!
这是一件好事阅读有关MVC从它的创造者,然后认识到,它并没有真正适用于Web应用程序。你可以阅读更多的http://heim.ifi.uio.no/~trygver/2007/MVC_Originals.pdf – Theraot 2012-03-14 07:48:55
这是一个很好的普遍的答案,但没有涉及到Ruby on Rails的明确。请参阅此链接更好的答案:http://www.tutorialspoint.com/ruby-on-rails/rails-framework.htm – 2014-03-21 15:31:17
Ruby on Rails的没有“视图”和“控制器”之间的任何真正的分离。视图在控制器的上下文中执行,实际上与控制器代码相同(语法不同)。这就是为什么'@ var'总是起作用的原因,并且与许多其他框架明显不同,在这些框架中Views完全独立于控制器执行。 – Carpetsmoker 2016-03-06 17:27:39
我认为围绕MVC包装头部的最好方式就是举例。尝试使用MVC编写简单的Rails应用程序。网上有很多教程,如the blog example at "Getting Started with Rails"。
如果选择通过编码一个例子来学习,检查出的答案Where can I find clear examples of MVC?
你的模型是你的程序使用的数据结构。
视图是与屏幕或下一级交互的部分。
的控制器通常处理模型和视图之间的数据
MVC结构经常嵌套,所以一个“模型”或“查看”可能含有自己的MVC(想想在屏幕上的组件。你可能只是用一个字符串填充它,但在幕后,组件的代码绘制它自己的小视图,它有自己的小模型(您传递的字符串),并有一个小控制器将数据绘制到视图上。 Rails,模型,视图和控制器的角色都是由框架定义的,任何教程都会指导这三个组件,因为它会引导您通过它创建的文件。
在其他系统中,这些碎片可能难以识别。此外,MVC不是“完美”,只要记住有有效的选择,但它是一个开始组织的好方法。
MVC并不仅仅针对Ruby on Rails。在Ruby on Rails出现之前,它实际上已经创建了一段时间。它主要只是一种组织代码的方式,以便您拥有一些负责模型的代码(数据库表的Class版本),一些负责视图(视觉上向用户显示的内容)的代码以及负责任的代码对于你的控制器来说(把视图和模型联系在一起并执行你的大部分逻辑)
这是非特定于框架的描述每个使用MVC的框架都有不同的实现方式对于Ruby on Rails模型将数据库表格表示为一个类,它可以直接在代码中与其他对象进行通信,而无需编写任何SQL。所有的SQL都在后台进行处理,您只需将它看作是一个普通的类(几乎没有,但它不是无缝的),该视图主要是HTML,代表了将发送给浏览器的内容呃只是将模型和视图一起传递的代码。
总而言之,MVC并不仅限于Ruby on Rails ......这只是最受欢迎的。
Ruby on Rails没有实现MVC设计模式。 Ruby on Rails具有名为控制器,模型和视图的文件夹。视图文件夹包含HTML文件。控制器和模型文件夹具有ruby文件。控制器映射到一个URL,并在请求该URL时执行控制器中的一个方法,关联的视图(HTML文件)被加载,并使用它的模型(数据结构)填充视图。那就是它与MVC设计模式的相似程度。人们说它是MVC是一种耻辱,因为它引起了一代人对MVC设计模式的混淆和误解。
在Rails中,模型是一个数据结构。
MVC基本上表明模型 - 视图 - 控制器。并使用如PHP,Perl和Python的等许多语言MVC一般MVC是这样工作的:
请求首先到达控制器,控制器发现和适当的视图,并与模型交互,模型与数据库进行交互,发送响应到控制器,然后控制器根据响应给出输出参数进行查看。
有一件事让我很烦这些图表是,它并没有真正做到公正在解释模型如何视图和控制器之间传递。它看起来好像模型是一个独立的实体,但它实际上是在视图和控制器之间传递的数据包。控制器*技术上*控制在服务器上的模型上发生的事情;在这种情况下从数据库加载数据。该图表看起来像模型负责这个(有逻辑来做这件事),当真正的控制器打这个电话。 – 2016-01-21 01:18:57
这里是在较高的水平上MVC模式是如何工作的简要概述:
控制器:
- 侦听在某种交互/事件流中。
- 控制器可以发送交互/事件类型的模型。
- 控制器也可以与视图进行通信。
型号:
- 模型将侦听在来自控制器的交互/事件。
- 是数据源的抽象。
- 处理数据逻辑和操作。
- 完成逻辑处理后,它会发送给控制器,然后与控制器进行通信。
检视:
- 视图可以与控制器通信。
- 了解如何以可视方式将数据从模型渲染到浏览器。
- 控制器告诉查看使用 模型中的某些内容进行操作。
几件事情要注意的是车型不能与意见直接通信,反之亦然。只有控制器可以与视图和模型进行通信,因此控制器充当从浏览器上的用户交互中检索到的交互/事件的委托人。
模型视图控制器原理划分应用程序的工作分成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/
感谢您投我的答案 – vinoth 2017-06-29 12:48:17
- 1. 什么是Ruby on Rails?
- 2. Ruby on Rails“什么是新的?” - 模态
- 3. 什么是更快的ASP.NET MVC或Ruby On Rails
- 4. Ruby on Rails - 什么是“查找”方法?
- 5. Ruby on Rails究竟是什么?
- 6. Ruby和Ruby on Rails有什么区别?
- 7. 你最喜欢的Ruby on Rails书籍是什么?为什么?
- 8. ASP MVC vs Ruby on Rails
- 9. Ruby on Rails MVC问题
- 10. Ruby on Rails MVC说明
- 11. Ruby on Rails中双引号字符串中的#{$$}是什么?
- 12. 什么是Ruby on Rails中模型的完全限定名称?
- 13. 什么是RSpec测试(Ruby on Rails)环境中的`StringIO`?
- 14. Ruby on Rails中的“脚手架”是什么意思?
- 15. 什么是在Ruby on Rails database.yml中的套接字声明?
- 16. 在Ruby on Rails中搜索最好的选择是什么?
- 17. Devise Ruby on Rails中的build_resource和资源是什么?
- 18. Ruby on Rails中导致此NoMethodError的原因是什么?
- 19. 在Ruby on Rails中,authenticate_with_http_basic是做什么的?
- 20. Ruby on Rails中的术语“vendoring”或“to vendor”是什么意思?
- 21. <%% =在Ruby on Rails中的含义是什么?
- 22. 什么是Ruby on Rails中的瞬态属性?
- 23. Ruby on Rails中db/seeds.rb代码的作用域是什么?
- 24. Ruby on Rails中连接表的正确关联是什么?
- 25. Ruby on Rails 3表单中的_snowman参数是什么?
- 26. 什么伤害少:Ruby on Rails 3或ASP .NET MVC 3
- 27. 你是什么意思Ruby on Rails不是线程安全的?
- 28. JRuby on Rails与Ruby on Rails有什么区别?
- 29. JRuby on Rails与Ruby on Rails有什么区别?
- 30. 为什么Ruby on Rails缺乏文档?
见http://stackoverflow.com/questions/1242908/in-english-what-really-是模型 - 视图 - 控制器 – 2009-12-18 23:56:32
@BillKarwin链接已不存在 – geoff 2014-07-20 04:34:52