2011-03-24 92 views
12

最好的做法是在您的asp.net mvc模型文件夾中創建一個模型。 將這些模型與您的視圖一起使用,並使用服務層將我的模型「修改」爲EF模型。asp.net mvc模型vs實體框架模型

或者你使用另一種方法。這種做法的問題是,我的(自制)模型的大部分時間是EF模型的拷貝(不是乾的)

所以有人可以解釋我用什麼模型來處理視圖,因爲它很容易混淆。模型/視圖模型/ Entityframeworkmodel ....

解決方案:

感謝所有的答案猜猜我是此刻重構一些事情!

回答

22

正確的做法是使用用於視圖模型不同類和不同的用於持久性(實體)。通常的原因是你經常需要發送一些額外的數據到一個視圖(例如數據填充下拉菜單,數據禁用某些字段等),使用不同的驗證或只顯示實體的子集。

我不是純粹主義者。如果我看到我的視圖模型與我直接使用實體的實體完全相同,但是我會在視圖中需要任何其他信息時重構代碼。大多數情況下,我從實體開始,由於增量開發而結束視圖模型。

+0

下面這個模式,它的命名規則,你會推薦什麼時候? MVC教程告訴你只需使用「模型」文件夾,將你的實體框架模型放入其中,並假定它們與你的視圖模型相同(正如我們所知,這通常不是這種情況)。 – Saturnix 2017-05-20 17:06:28

3

通常我有我的視圖模型在模型文件夾,我的領域模型在ORM層。

視圖模型(從名字)是爲那些你只需要幫助的觀看過程對象的正常模式,他們沒有持久性任何它們可能包含一些邏輯。

如果你面對你的域模型匹配您的視圖模型的問題,那麼你可能需要重新設計的模型或只是使用領域模型沒有一個人在這方面的中間人。

1

至於我,我寧願刪除在標準的MVC結構Models文件夾並添加的ViewModels文件夾中保存我的所有視圖模型。正如拉迪斯拉夫在第一次迭代中提到的那樣,這些視圖模型可能是來自您的域模型的實體的確切副本,但是增量式的增長將會有很大的不同。

+0

確定文件夾viewModels而不是模型的意義是什麼? – DavidB 2013-02-07 09:33:06

+0

無。但通過這種方式,您可以看到「視圖」模型對象保存在那裏,而不是「業務」模型對象。這一切都取決於個人喜好:) – 2013-02-07 12:26:57

+0

我明白了,現在有道理。謝謝回覆。 – DavidB 2013-02-07 16:34:54

1

嗯,這沒有任何意義。我曾經爲此苦苦掙扎,我認爲你需要擁有不是表格實體的模型,我稱之爲領域模型。其原因有時是,如果你使用linq2sql,那麼你必須處理橋接/鏈接表(這不是真正的實體)和複雜的計算,所以你不能在你的表實體中,正確的?所以,我的方法是讓視圖模型< - >模型< - >實體