2011-06-07 48 views
0

我仍然掌握了MVC,並且儘量保持對模式的真實性。我擁有Model的財產狀態等等。控制器調用視圖並傳遞適當的模型。如果Status =「Incomplete」,我需要它顯示Incomplete <a href="blah">Complete registration</a>,如果Status =「On Waiting List」,我需要它顯示On Waiting List: Position @Model.WaitListPosition等等。這是合適的MVC方式嗎?

根據狀態決定顯示內容的邏輯將在視圖中,因爲它決定了它是如何呈現給用戶的,對嗎?或者應該在控制器中構建字符串並傳遞給視圖?

回答

2

第一個比較好。控制器應儘可能薄。讓視圖決定如何呈現傳遞給它的數據。

+0

是的,控制器不應該設置顯示字符串 – malko 2011-06-07 15:06:50

0

不要在控制器中構建字符串,除非您希望在控制器中而不是在業務組件中使用業務邏輯。如果您絕對認爲需要將其作爲一個字符串進行分析,因爲這是您解決此問題的唯一方法,請讓業務組件完成實際工作。

至於如何在視圖中進行分支,它可以像包含特定條件的數據一樣簡單,並且基於該數據的存在具有視圖分支。或者有一個布爾值(或某種標誌),表明用戶在進程中的位置。如果該值表示不完整,請顯示「不完整」邏輯。這樣View只能根據數據綁定做出決定,而控制器只是控制流量,並不會做出業務決策。

0

這個邏輯最適合你的觀點 - 最終歸結爲代碼重用,這是特定的視圖。如果您在多個視圖中需要相同的行爲,那麼在視圖中運行此邏輯仍然會更好,既可以作爲局部視圖,也可以作爲自定義HTML幫助程序。儘可能簡化控制器中的邏輯。

0

分離關注點表明控制器不應該知道如何顯示數據,只需要模型調用來獲取視圖所需的數據,其中包括狀態字段。該視圖關注的任何邏輯應該指定如何轉換數據以供顯示。

某些框架(Ruby on Rails的是唯一的一個,我知道)提供的方法來從視圖的佈局提取數據轉換邏輯。在RoR的情況下,他們被稱爲幫手。例如,您可以使用名爲format_status的幫助程序方法,該方法將狀態作爲其參數並返回預期的HTML呈現。請注意,這使您可以輕鬆地爲該方法編寫單元測試,而無需處理(更多)複雜的Web視圖測試。

+0

ASP.Net MVC也支持helpers,如果我期望在不止一個視圖中重用代碼,我肯定會使用它。 – MHollis 2011-06-07 15:23:09

+0

@MHollis,我會使用一個幫手,重用或不重用,因爲我可以輕鬆地爲它編寫單元測試。很高興知道.Net也有幫助功能,感謝那些信息。 – 2011-06-07 15:27:22