我正在使用MVC 3,並且在使用實體框架時遇到問題,所以我試圖瞭解實現我自己的DAL的最佳方法。 我管理我的系統中的幾個主要實體:用戶,部門,日曆等... 我想了解使用這種分層架構的最佳實踐。實現DAL和BOL
如若DAL實現只返回數據表或數據集,還是應該熟悉模型\業務對象的方法(用戶,部門日曆等)?
它應該包含表示不同模型\業務對象的類嗎?
我應該在哪裏放置不同的存儲庫類,它們是否也是DAL的一部分?
我正在使用MVC 3,並且在使用實體框架時遇到問題,所以我試圖瞭解實現我自己的DAL的最佳方法。 我管理我的系統中的幾個主要實體:用戶,部門,日曆等... 我想了解使用這種分層架構的最佳實踐。實現DAL和BOL
如若DAL實現只返回數據表或數據集,還是應該熟悉模型\業務對象的方法(用戶,部門日曆等)?
它應該包含表示不同模型\業務對象的類嗎?
我應該在哪裏放置不同的存儲庫類,它們是否也是DAL的一部分?
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文件夾內。視圖模型是您將傳遞給視圖的類。典型的控制器動作將使用存儲庫來獲取一個或多個域實體,將這些實體映射到您爲特定視圖定義的單個視圖模型,並最終將視圖模型傳遞給視圖。當然,這也可以採用其他方式:控制器操作將視圖模型作爲視圖的操作參數,將此視圖模型映射到一個或多個域實體,並從存儲庫中調用一個或多個方法,將這些域實體傳遞給它們。
您可以更具體地瞭解您使用EF所遇到的問題,或者您根本不想使用它,並且肯定會推出自己的DAL? – MarkG
你可以實現它到你的模型 –