2013-02-01 33 views
0

我正在使用LINQ-SQL連接到我的SQL Server數據庫的MVC應用程序。使用LINQ時是否需要自定義域模型?

當前在獲取數據時,我將我的LINQ對象的屬性傳遞給域模型,然後在我的視圖模型中創建屬性。

例如我視圖模型可能具有以下屬性:

public Models.UserModel user { get; set; } 
public List<Models.CountryModel> countries { get; set; } 

我的領域模型具有完全相同的屬性,我的LINQ對象,我複製了這樣的特性:

Models.UserModel user = new Models.UserModel(); 
user.Username = User.Username; 
user.FirstName = User.FirstName; 
user.LastName = User.LastName; 

其中user是我的Models.UserModel對象,而User是我從用戶數據庫表中映射的LINQ對象。

由於我的領域模型與我的LINQ對象完全一樣,對於我將這些數據轉移到領域模型有沒有什麼優勢,或者我可以在我的視圖模型中使用LINQ對象,比如:

public User user { get; set; } 
public List<Country> countries { get; set; } 

使用域模型的優點是什麼?這完全是鬆散地與數據庫LINQ對象耦合嗎?


如果使用領域模型有優勢,那麼最好在我的MVC應用程序中構建這些領域?

它們是否應該在「Models」文件夾級別完全分開(例如子文件夾「DomainModels」和「ViewModels」)或重合(如「UserEditViewModel.cs」和「UserDomainModel.cs」)。

回答

3

由於我的域模型是完全一樣的我的LINQ對象,沒有任何 優勢,我在傳遞這個數據到一個域模型,或 會是沒關係,我只是使用LINQ的對象我視圖模型等 爲:

你可以在引用的情況下域模型在你的視圖模型他們正是相同。除了在現實世界中他們從不相同,我沒有看到重複這種邏輯的任何好處。你總是有一些特定的視圖,如驗證甚至顯示標籤。具有純粹視圖模型的優點是您的應用程序不再與您的數據庫結構相關聯。您可以輕鬆地翻轉/觸發數據訪問技術,而無需修改UI部分。我發現這種清晰的分離更容易維護,並且總是傾向於在我的應用程序中使用它。

+0

那麼我最後的代碼片段是最好的選擇嗎?將對象首先傳遞給自定義域模型沒有好處嗎?我想也許我對使用n層應用程序感到困惑,在這些應用程序中,您將模型圖層傳遞給MVC圖層 – Curt

+0

您的最新更改有助於我理解域模型的用途。如果我要從使用LINQ-SQL切換到使用帶有存儲過程的直接SqlCommands,那麼我需要一個域模型,並且需要更改View Model中的所有引用! – Curt

+0

聽起來像是除非我100%確定我的應用程序總是使用LINQ-SQL,否則我應該使用域模型。你有沒有一個例子來說明如何在我的應用程序和視圖模型中構造這些內容?它們是否應該在「Models」文件夾級別完全分開(例如子文件夾「DomainModels」和「ViewModels」)或重合(如「UserEditViewModel.cs」和「UserDomainModel.cs」)。感謝您的幫助 – Curt

相關問題