0

我正在使用MVC 3,並且在使用實體框架時遇到問題,所以我試圖瞭解實現我自己的DAL的最佳方法。 我管理我的系統中的幾個主要實體:用戶,部門,日曆等... 我想了解使用這種分層架構的最佳實踐。實現DAL和BOL

  1. 如若DAL實現只返回數據表或數據集,還是應該熟悉模型\業務對象的方法(用戶,部門日曆等)?

  2. 它應該包含表示不同模型\業務對象的類嗎?

  3. 我應該在哪裏放置不同的存儲庫類,它們是否也是DAL的一部分?

+0

您可以更具體地瞭解您使用EF所遇到的問題,或者您根本不想使用它,並且肯定會推出自己的DAL? – MarkG

+0

你可以實現它到你的模型 –

回答

1

1)如果該DAL實現只返回數據表或數據集

絕對不是方法。數據表和數據集是過去的工件。 DAL方法應該採取/返回您的DAL實體。例如,如果您使用的是實體框架,那麼這些將是EF爲您創建的自動生成的類。或者,如果您使用的是EF Code First,那麼這些將會是您寫入的映射到SQL表格的類別

2)它應該包含表示不同模型\業務對象的類嗎?

如1)中所述,DAL層應包含映射到SQL表的實體以及存儲庫接口的實現。存儲庫接口定義了這些實體的操作。在DAL層中,您將爲Entity Framework實現此接​​口(如果這是您打算使用的)。在方法內部,您將使用DataContext對您的實體執行不同的操作。

3)我應該在哪裏放置不同的存儲庫類,它們是否也是DAL的一部分?

您應該將它們放置在與數據訪問類相同的程序集中。

ASP.NET MVC應用程序將使用DAL層。您的控制器將簡單地將存儲庫接口作爲構造函數參數,並在其中調用各種方法。然後,您將配置您選擇的依賴注入框架,將此存儲庫接口的特定實現注入到控制器中。這個實現將是實體框架特有的實現。

但不管你做什麼,不要忘記在ASp.NET MVC應用程序本身內部定義視圖模型。這些可以放在Models文件夾內。視圖模型是您將傳遞給視圖的類。典型的控制器動作將使用存儲庫來獲取一個或多個域實體,將這些實體映射到您爲特定視圖定義的單個視圖模型,並最終將視圖模型傳遞給視圖。當然,這也可以採用其他方式:控制器操作將視圖模型作爲視圖的操作參數,將此視圖模型映射到一個或多個域實體,並從存​​儲庫中調用一個或多個方法,將這些域實體傳遞給它們。

+0

你提到以下內容.. _ASP.NET MVC應用程序將消耗DAL層_ .. MVC應用程序如何消耗DAL? – Mortalus

+1

通過讓您的控制器將存儲庫接口作爲構造函數參數。然後通過配置你的依賴注入框架來注入這些存儲庫的具體EF(或其他)實現來注入你的控制器。然後,控制器操作將只調用這些存儲庫上的可用方法。 –

+0

另一個問題:你說_不要忘記實現View Models_,如果我的視圖模型恰好是實體本身或幾個實體呢?將它用作我的觀點模型是不好的做法,例如創建用戶視圖或管理視圖,列出所有實體等... – Mortalus