2009-06-21 85 views
4

在MVC中,1個模型1個表或1個模型幾個表?在MVC中,1個模型1個表格或1個模型幾個表格?

我正在構建一個包含3個表的應用程序。我不知道我是應該爲所有3張桌子創建一個模型還是爲3個桌子創建3個模型。

在這種情況下,我使用3個模型的3個表,如果我想加入這3個表,我應該在哪裏放置代碼?把代碼放在3個模型中的任何一箇中?

有什麼建議嗎?

回答

4

通常你會爲每個表格創建一個模型,所以在你的情況下,這意味着你需要3個模型。 當我說「模型」我的意思是一個類將表示一個單一的行(通常)在一個表中。

例如: 表:

  1. 產品
  2. 訂單
  3. 顧客

在這種情況下,最容易和簡單的是創建3個不同的類(其表示數據應用程序模型),其中第一個類代表單個產品,下一個代表一個訂單,最後一個類代表單個客戶。

+4

如果我想加入這3個表格,我應該在哪裏放置代碼? – Billy 2009-06-21 09:36:28

+0

此外,如果您有'多對多'關係,則通常會有一張表來表示可能不會由模型表示的關係。 – 2009-06-21 09:45:57

5

一般來說,MVC的'Model'部分應該被解釋爲'Presentation Model'或'View Model' - 也就是封裝View所需的所有數據和行爲的類。這可能也可能不等同於域模型。

域模型應該被設計成獨立於UI。這意味着這些模型不應該受到特定於UI的數據和行爲的污染 - 例如確定是否啓用特定按鈕。

您可能還想在幾個不同視圖(例如主/細節,或顯示/編輯)中顯示相同的域對象,並且如果這些視圖充分不同,則爲每個視圖創建視圖模型將會有所幫助。

因此,一般來說,您應該獨立設計您的域圖層和您的表示層。

在域圖層中,您可以選擇將三個表格建模爲三個類。福勒的Patterns of Enterprise Application Architecture和埃文斯的Domain-Driven Design等書籍包含了很多關於如何將關係數據建模爲域模型的指導。

在MVC中對視圖建模時,最有意義的是在每個視圖中創建一個模型。這種視圖模型可以簡單地封裝單個域對象,但它也可以封裝和聚合幾個不同的域對象。

通過這種方式,您可以確保關注的分離,並且您的課程遵循單一責任原則。

對於非常簡單的場景,將域模型和演示模型合併到一個層中可能有意義,但您應該認識到這基本上意味着解決方案中沒有域模型 - 所有模型都將是純演示模型。