2010-06-20 85 views
2

從我討論過的關於MVC Web框架的人數有限,我聽到有人說,忘記窗體,一個視圖文件應該包含HTML標記,字符串操作和幾個for each循環。如果可能的話,我也被告知應該避免if意見陳述。這是普遍認同的嗎?什麼不應該在MVC視圖內?

編輯: 已經激發了這個問題,正在寫導航的情況下,我發現自己寫:

if secondary_navigation_item has children 
    ... 

我想,理想情況下,這是否有資格作爲邏輯(那不應該在這裏)?

+0

我希望我將這個問題改爲「什麼是定義MVC架構的好資源」 – 2010-08-18 15:30:05

回答

2

觀看次數應基本包含:

  • HTML標記
  • 的Javascript
  • CSS
  • 最小的服務器端代碼,您可能需要投入視圖

所以,一個視圖通常應該包含佈局元素。主要的處理邏輯應該放在Controller中。

更多信息:

http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller

+0

也許我在這裏錯過了您的觀點,但Javascript? CSS? Strewth,我不這樣做我的靜態HTML項目。我很難說這是最佳做法。雖然它確實有它的地方。 – 2010-06-20 15:06:10

+0

我同意Sarfraz。它完全可以接受循環遍歷數組,使用'if'來確定要顯示哪個圖像等。儘量保持代碼最小化,當然不要在視圖中執行驗證/處理等。 – 2010-06-20 15:07:41

+0

@ yaya3:哦,是的。我始終在我的視圖中使用Javascript,CSS和jQuery。但那是客戶端代碼,而不是服務器端代碼。 – 2010-06-20 15:09:52

4

一般來說,視圖不應包含任何服務器端的業務邏輯。但它仍然可以包含直接與呈現視圖有關的邏輯。

一個例子是包含某種變體記錄的視圖,其顯示取決於特定字段的設置。例如,根據性別字段設置爲男性或女性,顯示不同信息的記錄。當然,這將需要一個if聲明。

+0

如果你發現自己在視圖中編寫了很多像嵌套ifs這樣的邏輯,你應該考慮你的結構設計是否合理。 – 2010-06-20 15:12:48

4

要說你的觀點不應該包含任何條件邏輯只是愚蠢的。您還將如何生成像「新消息」圖標或閃存消息的UI元素—爲每種可能的接口狀態使用不同的視圖模板?這就像說你的控制器不應該包含任何變量賦值,因爲數據操作屬於模型。

只要與視圖相關的邏輯具有視圖中的邏輯,就完全可以。你不應該陷入對模型 - 視圖 - 控制器定義的絕對或迂腐的解釋。只要你理解並應用了MVC的基本概念,你就走在了正確的軌道上。

每個規則都有一個例外,並且在某些情況下,在控制器中執行字符串操作,甚至在視圖中實現應用程序流。有時你只需要逐個評估,並應用一點常識。

相關問題