2011-04-18 38 views
12

構建Web應用程序時,我仍然對JavaScript代碼在MVC模式中的位置感到困惑。我認爲它是這樣工作的。JavaScript在Web應用程序的MVC模式中的位置在哪裏?

  • 模型是數據庫並獲取數據輸入/輸出 所需的 類。
  • 控制器將是我編寫我的邏輯 的類,即Java servlet,它接受一個 Ajax請求,然後調用 數據庫;
  • 視圖是在JSP頁面是 通過 的servlet(我控制器)

因爲JavaScript代碼在瀏覽器中,我認爲它作爲景觀的一部分編譯,但是回到了Ajax請求它處理用戶輸入,根據這些事件做出服務器請求,然後將數據返回給頁​​面,那麼這也會使控制器的一部分?

另外,它們在MVC中引用域模型時意味着什麼?

回答

5

JavaScript將主要是與UI有關的問題;您的視圖正在向控制器發出ajax請求。控制器沒有發出ajax請求;模型也不是。對於所有意圖和目的,ajax請求不是正常請求的任何內容;只是在您的響應返回之前,瀏覽器不會掛起。

JavaScript也在您的客戶端上下文中執行,但不在服務器的權限範圍內,因此它應該進入視圖。

1

尼克,我在MVC的個人經驗,與ZendSpring一起工作,我認爲JavaScript代碼將被視爲視圖的一部分,因爲JavaScript代碼有助於查看並直接與視圖交互。 通過Ajax發送和接收數據可以被視爲請求。

+0

@ Amir-感謝您的回覆。 – screenm0nkey 2011-04-19 12:54:50

3

MVC只是一種模式。 JavaScript代碼本身可以實現這種模式,所以我不認爲它適合於服務器端框架模式的其他部分。查看Backbone,瞭解如何在JavaScript代碼中使用MVC。

您可以將您的JavaScript代碼建模爲與您使用服務器端代碼建模相似的概念。 JavaScript代碼本身將通過服務器端應用程序的視圖提供服務,但除非您僅添加帶有JavaScript代碼的眼睛糖果(您並不是),否則JavaScript代碼實際上是它自己的實體,並不一定適合你的服務器端MVC範例。

嘗試從任何服務器端分離JavaScript代碼。只要認爲它是一個'附加',如果在瀏覽器中禁用,不會中斷您的應用程序運行。我只是添加了一些細緻的問題,以便更好地進行交互等。實際上,如何實現JavaScript代碼的模型取決於您,(但我強烈推薦Backbone)

也可以在JavaScript中只做一個Rich前端數據源。在這種情況下,javascript將再次負責維護模型,視圖和控制器。

域模型通常只是指您的應用程序的業務邏輯。大腦可以說你的應用程序中應該發生什麼。這是一種封裝應用程序所有業務邏輯的抽象概念。

+0

爲什麼你推薦backbone.js而不是其他的實現MVC模式的特殊原因? ([PureMVC](http://trac.puremvc.org/PureMVC_JS),[JavascriptMVC](http://javascriptmvc.com/)等) – Paolo 2011-04-18 16:42:43

+0

從來沒有與純粹的工作,但JavaScript MVC,至少在最後一次看着它似乎太臃腫,我所需要的。主幹是一個非常乾淨,簡單的實現,源代碼很容易遵循,它的文件大小非常小。我也剛剛發現它的繼承模式非常好,即使你不使用任何視圖/控制器的東西,也可以直接在JavaScript中使用OO。 – brad 2011-04-18 19:40:01

+0

+1謝謝你。這是一個非常好的迴應。 – screenm0nkey 2011-04-19 12:51:10

1

JavaScript代碼是視圖的一部分。該視圖是輸出到瀏覽器的內容,雖然Javascript代碼不會自動具有可視外觀,但它可用於修改DOM。

當您開始談論Ajax時,很容易將JavaScript代碼看作正常事物流中的其他東西,但是您應該打破Ajax請求的流程以查看它僅僅是另一個HTTP請求。

有些人只會有一個控制器來處理Ajax請求,而另一些人可能會傳遞一個參數給描述Ajax請求以修改輸出的控制器。

無論哪種方式,JavaScript代碼都位於視圖中,您可能需要在MVC設置中學習一些關於Ajax的其他設計策略。

+0

+1感謝您的回覆。 – screenm0nkey 2011-04-19 12:55:54

0

如果您使用JavaScript來處理DOM,那麼是的,它是View的一部分。但是您仍然可以在服務器端使用JavaScript,在這種情況下,它可能是與業務相關的代碼的一部分。

相關問題