我想知道Javascript MVC框架的目的,如Backbone.js和Spine.js。作爲一名熱衷/有經驗的Ruby on Rails開發人員,我從未遇到過需要另一個MVC圖層用於應用程序的有用案例。對我來說,這似乎相當愚蠢。我大量使用不引人注目的Javascript來處理事件和錯誤處理邏輯,但它並沒有爲我的視圖創建類和視圖。Javascript的目的MVC框架
請原諒我的無知,在這一領域,但我肯定會希望得到經驗豐富的開發人員這個回答。
我想知道Javascript MVC框架的目的,如Backbone.js和Spine.js。作爲一名熱衷/有經驗的Ruby on Rails開發人員,我從未遇到過需要另一個MVC圖層用於應用程序的有用案例。對我來說,這似乎相當愚蠢。我大量使用不引人注目的Javascript來處理事件和錯誤處理邏輯,但它並沒有爲我的視圖創建類和視圖。Javascript的目的MVC框架
請原諒我的無知,在這一領域,但我肯定會希望得到經驗豐富的開發人員這個回答。
像Backbone.js的JavaScript的MVC框架是將結構,以您的前端。
建設[日益流行]單頁的JavaScript應用程序(SPJA)時,這是最有用的。如果您大量使用不引人注意的JavaScript,則可能會爲動態內容做相當數量的Ajax,以避免刷新用戶頁面。 SPJA通過讓用戶訪問應用程序的所有區域而無需刷新頁面,從而更進一步。如果沒有MVC框架提供的結構,客戶端代碼可能會很快失去控制。
我認爲這個框架更適合構建複雜的JS應用程序。使用Ajax更新/保存。例如,MVC框架可以更容易地構建一個js Calculator應用程序。只是我的2點。
我們使用SPA(單頁應用)的Backbone.is。有點像Gmail。
某些應用程序架構師只需要具有瘦Web服務接口的服務器中的數據層功能。在這種情況下,在客戶端擁有MVC體系結構很有用。
在這一天結束,這取決於你想要把你的控制器和視圖功能。如果你想在服務器上使用Rails,不需要任何AJAX。在服務器中有一個模型層,可以在服務器中編碼複雜的關係,視圖和驗證。它可以讓你的控制器響應不同的數據格式(例如xml,html,json)。它允許您使用ERB或HAML來控制視圖。
但是在許多情況下,您可能需要將處理卸載到客戶端。在這種情況下,您可能希望將視圖處理移動到客戶端(例如使用AJAX)。或者你可能想讓客戶端決定是否渲染html,xhtml,html5或其他。或者您可能需要使用一些本地存儲來緩存客戶端中的數據。或者您可能想要在瀏覽器中進行數據驗證和查看組合。
某些應用程序架構師只需要具有瘦Web服務接口的服務器中的數據層功能。在這種情況下,讓客戶端的MVC體系結構是謹慎的是非常有用的,因爲您最終必須處理模型層問題,例如驗證,複雜視圖,數據過濾,控制層問題(如視圖格式化決策) ,以及佈局,渲染和樣式等視圖層問題。
如果你的web前端只是表示層,那麼擁有雙重MVC是絕對多餘的。一個視圖和您的所有數據以及應用程序邏輯駐留在服務器上。
然而,許多現代複雜的網絡應用程序試圖通過創建高度互動的前端,與使用Ajax或類似的替代品如服務器動態通信最大化用戶體驗。 Flash AMF。 在這種情況下,在您的應用程序中,分離處理與服務器的實際通信的腳本部分,爲管理已在客戶端系統中獲取/緩存的本地數據,用戶交互事件處理和歷史記錄管理提供適當的規定。一旦開始思考它,很快就會發現,在JavaScript代碼中使用單獨的MVC圖層是一個好主意,因爲它適合場景並使代碼易於管理。
例如,在像Facebook這樣的應用程序中,用戶交互事件(如圖片被放大時按下L或點擊Like按鈕)實際上映射到相同的動作,因此該動作應與構成查看並附加事件處理程序。將更新的元數據信息實際發送到服務器可以再次分離出來,因爲這部分可以被重新用於更新需要傳回服務器的元數據的任何動作。同樣,對元數據的驗證可以在更新元數據的不同用戶操作之間重複使用。
通過這個例子,我希望已經傳達了MVC設計如何適應web前端的概念。
有沒有穿西裝面試?一樣。
Nobdy的打算,如果他們認爲他是編碼這樣的東西,整天支付前端開發$ 95K /年:
form1.user_name.value = 'John Doe';
form1.user_name.onclick = function() { form1.user_name.value = ''; }
但是,如果你開始拍打着你對MVC,節點,棱角分明,骨幹牙齦,AJAX,RESTful或JSON ......他們認爲自己處於計算機科學的前沿。
這與PHP框架相同。任何CRUD應用程序編碼器贏得$ 40K /年的可以這樣寫整天:
$user_name = trim(strtolower($user_name));
echo 'Your name: ' . $user_name . '<br/>';
但是,如果你一開始提的MVC,Yii的,Laravel,Symfony的,在Zend ......它就像穿上斜紋軟呢外套與補丁在肘部,拿着一個說「年度教授」的咖啡杯。
同樣作爲任何其他領帶,一個人需要爲JavaScript代碼: *抽象(關注點分離) *隱公約和相合 *代碼的可重用性
你可以用,當然香草JS得到它,但必須自己編寫一個框架。所以你寧願採用現有的知名和經過驗證的解決方案。
這些是核心要求,任何其他都取決於你允許框架限制你的開發過程。
本文將擴展@sghill的內容:http://andyet.net/blog/2010/oct/29/building-a-single-page-app-with-backbonejs-undersc/ –