2012-07-30 41 views
0

MVC代表模型,視圖和控制器。 Backbonejs.or通過與Rails進行比較來解釋這一點,更多here及以下。因爲我不知道Rails,所以比較是沒有意義的。下面的exctract突出了控制器,也許是一個不嚴格的MVC的原因 - 不知道它推斷什麼。這是什麼意思,骨幹不是一個嚴格的MVC?說明「骨幹不是嚴格的MVC」

摘自Backbonejs.org網站(來源here)。

如何骨幹涉及到 「傳統」 MVC?

模型 - 視圖 - 控制器模式的不同 實現傾向於不一致 約控制器的定義。 如果它在Backbone中有幫助,那麼View類也可以被認爲是一種控制器, 調度源自UI的事件,其中HTML模板 充當真實視圖。我們稱之爲視圖,因爲它代表了一個邏輯塊UI,負責單個DOM元素的內容。

骨幹的整體結構比較像Rails的服務器端MVC框架 ,件排隊,像這樣:

  • Backbone.Model - 就像一個Rails模型減去類的方法。在業務邏輯中包裝一行數據。
  • Backbone.Collection - 客戶端的一組模型,具有排序/過濾/聚合邏輯。
  • Backbone.Router - Rails routes.rb + Rails控制器操作。將網址映射到功能。
  • Backbone.View - 一個邏輯的,可重用的用戶界面。通常但並非總是與模型相關聯。
  • 客戶端模板 - Rails .html.erb視圖,呈現一大塊HTML。

我添加了斜體以突出顯示爲什麼它顯然不是MVC。上面我可以找到模型和視圖 - 術語 - 但術語controller被明確地省略,而不是使用術語路由器,集合和模板。爲什麼路由器/集合/模板不是控制器?

我發現這個控制器 - 定義controller mediates input, converting it to commands for the model or view(Wikipeadia here),有點模糊。

+0

關於MVC的非常流行的線程[這裏](http://stackoverflow.com/questions/5863870/how-should-a-model-be-structured-in-mvc/5864000#5864000)。 – hhh 2012-07-31 09:18:45

回答

2

非常有趣的陳述,特別是因爲Rails距實現MVC靈感的設計模式還很遙遠。實際上,我會說,BackboneJS的解釋更接近MVC的想法。

視圖不應該只是一個愚蠢的模板。它應該負責所有的表示邏輯(並且,在經典的MVC,Model2 MVC和HMVC模式的情況下,它是一個活動結構)。

Rails框架實現的內容可以更好地描述爲「ORM,模板,適配器」反模式,其中業務邏輯和表示邏輯都被迫進入他們稱之爲「控制器」的地方。

BackboneJS實現的內容實際上更接近於MVVM設計模式,其中viewmodel提供了帶有信息的被動視圖。然後查看決定如何處理它以及使用哪些模板。

0

據我所知,傳統的MVC模式具有以下要素:

模型 - 僅保持數據(也許一些數據處理方法)

視圖 - 呈現顯示出的部分的視覺和互動元素將數據發送給用戶。

控制器 - 處理模型和視圖之間以及用戶和代碼之間的交互(例如,當模型更新,重新呈現視圖,當用戶單擊按鈕時,更改模型中的數據)。

在Backbone中,沒有明確的控制器。相反,這個控制功能是通過以下方式執行的:a)視圖本身(例如,設置事件監聽器以更新用戶動作模型) b)處理要顯示哪些視圖的路由器和c)索引文件或其他HTML/JS碼。

+0

你真的不明白,模型層的責任是什麼。或者控制器應該做什麼。 – 2012-07-31 01:07:25

+0

我很困惑 - 你的意思是這樣[這裏](http://i.stack.imgur.com/brjhk.png)從線程[here](http://stackoverflow.com/questions/5863870/如何-應該-A-模型進行結構式-MVC/5864000#5864000)。 MVC最初是爲GUI設計的:'「MVC最初是爲了將傳統的輸入,處理,輸出角色映射到GUI領域而開發的:」'(源後者線程)? – hhh 2012-07-31 09:48:00