是否有人可以在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