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

相關問題