2010-04-26 105 views
3

我已經開始了一個學校的項目,我正在使用ASP.NET MVC 2 + LINQ2SQL和一個業務層,所以我的UI不直接與數據庫交互。我的問題是這樣的:MVC +存儲庫模式 - 仍然依賴於數據模型?

在我的MVC項目中,當提出視圖並傳遞數據時,我仍然需要包含我的Data項目以訪問我的Linq2Sql項目中的類。它是否正確?

例子:

控制器:

ClassesRepository cr = new ClassesRepository(); // this is from my Business project 
Class classToEdit = cr.GetByClassId(id); // "Class" is from my data project 

我還是要引用Class類在我LINQ2SQL數據的項目 - 不要我的用戶界面是完全獨立的我的數據層?或者,也許我正在解決這個問題。

回答

3

我更喜歡讓我的存儲庫在內部對我自己的類進行映射。所以我從我的倉庫返回的不是LinqToSql類,而是我自己的。然後,我將返回的類數據映射到每個視圖的模型中。

所以看起來:

LinqToSQL類 - > MyClass的(從儲存庫輸出在這一點) - >(控制器映射到建模爲特定視圖)爲MyModel。

確保始終爲每個視圖創建一個模型。您可以使用您的存儲庫返回的內容,但這是一個捷徑,將其映射到他們自己的視圖模型將在未來獲得回報。

+0

當你說每個視圖模型,你的意思爲索引,編輯模型,創建視圖控制器嗎?或者一般來說,每個物體都有一個模型,用控制器進行操縱?現在,我創建了幾個視圖模型來傳遞其他數據以及我的linq 2 sql類。 – Jack 2010-04-27 03:16:17

+0

我的意思是每個視圖的模型。所以是一個索引,編輯,創建模型等...將您的linq2sql類映射到您的視圖模型,因爲視圖模型不應直接綁定到linqtosql模型。你也可以查看模型在任何情況下都不需要包含在linqtosql或repository類中的所有數據。 – Kelsey 2010-04-27 03:19:39

+0

啊,我看到了,非常感謝,非常有幫助。我想我的最後一個問題是,這將如何在未來獲得回報?它只是對我來說更多的工作(構建包裝模型)。用linq 2 sql我有我的驗證屬性,然後我必須做我的視圖模型相同。 – Jack 2010-04-27 21:13:41

1

看看MVC中心的高爾夫追蹤系列,它能做到你想要的和Kelsey所描述的。

http://www.mvccentral.net

+0

感謝您的鏈接 - 您的代碼非常乾淨。我將在測試網站上進行一些重構以整理。 – Jack 2010-07-30 16:04:59