2009-04-21 584 views
11

我剛剛完成了Scott Gu的Nerd Diner教程。我發現它非常有幫助,因爲它不僅教會了ASP.Net MVC的基礎知識,還教導瞭如何使用知識庫,驗證,單元測試,Ajax等。非常棒,但仍然可以管理。ASP.Net MVC查看結構

不過,我很好奇他的網站結構:

具體來說,他用這一觀點strucuture爲每個對象:
/ModelObject /編輯/
/ModelObject /新建/

然後提取兩種觀點之間的共同要素,並將其納入局部。

我理解這個邏輯,但是如果你的數據庫中有足夠數量的表,它似乎會導致「視圖爆炸」。

斯科特真的很好,所以我假設他的結構是正確的。但我想知道爲什麼。

謝謝!

[編輯澄清]

我知道,很多時候,有必要爲了有多個動作(和視圖)來處理在創建和編輯不同。這是非常簡單的編輯和創建的情況,其中兩個動作之間的唯一區別在於一種情況下模型具有ID並且需要更新,而在另一種情況下模型不會,所以它需要是插入。

在這種情況下,通過使用相同的視圖來處理將導致重大問題的兩種情況,是否違反了「啞視圖」規則?

回答

6

視圖結構基於控制器,而不是直接基於模型。在Mvc方法論中,您應該對控制器中的每個操作(實質上每個公共方法)都有一個視圖。控制器操作不必直接與數據庫中的每個表匹配,但數據庫中表的數量與控制器和視圖的數量之間可能存在某種直接關係。控制器是更高層次

這是標準的有在控制器上CRUD類型的行動,當它們適用:

  • 指數:列表中的項目
  • 詳情:查看特定項目
  • 編輯:編輯項目
  • 創建新的項目
  • 刪除:刪除項目

這些操作中的每一個都需要一個視圖(有時不止一個)。

所以,是的,如果它是一個大型應用程序,你可以收集大量的視圖。最大限度地減少代碼的方式是:

  • 提取共享功能,以局部視圖,以保持行動的意見,小而簡單地
  • 保持視圖和控制器簡單,使他們易於維護
  • 使用Ajax在一個視圖中

指出的是,任何大的應用程序都將有很多的形式是非常重要的實現更多的功能。無論是Mvc還是Web Forms,如果需要處理大量數據,將會有很多必要的表單來執行此操作。

+1

你爲什麼列表刪除?刪除很少需要它自己的視圖,它通常作爲在索引,細節或編輯視圖中啓動的操作來處理。 – Aaron 2009-04-23 12:09:57

1

如果您具有asp.net webforms開發人員的背景,那麼您的答案很自然。 有幾個問題,這取決於觀點。起初,使用asp.net-mvc我們沒有完全配備的服務器控件爲我們做了很多事情,而沒有真正意識到他們做了什麼。現在,你必須輸入更多的代碼,並有像html外科醫生的眼睛。這樣我可以找到一個合理的問題「視圖爆炸」 其他項目遵循或多或少的結構,見項目由羅布康裏: Mvc Storefront

PS:「瘦控制器,脂肪模型和......阿呆視圖」

[更新迴應澄清]

MHH ..我認爲沒有違反「啞觀」。重要的是,所有視圖都與業務邏輯層或模型中的代碼無關。你可以有一個「保存」按鈕,它是控制器必須知道哪個動作必須執行,插入或更新。

2

確實,這確實可以提供很多意見。然而,我發現在我的真實生活應用中,我會有很多表格,我沒有與CRUD操作1:1的相關性。雖然我肯定有數據進入這些表格,但我發現大多數情況下,一個視圖呈現來自至少兩個(如果不是三個或更多)表格的數據。就像所有其他應用程序一樣,您必須知道自己在做什麼,以便您可以計劃一些事情。任何大型應用程序都需要預先進行相當多的規劃(其中包括分析MVC的視圖/控制器數量)。

這只是你可以根據你的臀部和過去的經驗一起推出的小應用程序。

1

在更多的思考,這是我在想什麼:
結合編輯/創建視圖,因爲

    會很容易在簡單的模型 - 屬性相同顯示
    - 相同的驗證

但是這樣做會迫使你要麼

    - 同時處理更新,並在相同的動作
    插入 - 使用控制語句在視圖中,以確定哪些瀏覽行爲被用於更新

兩個選項看起來醜陋的和不必要的,當它是如此易於使用單獨的操作和單獨的視圖,通用代碼被提取到一個部分。