可能重複:
Where to write Database and Business logic in MVC?我們不需要在MVC3架構中使用DAL層嗎?
我剛開始用MVC3模式。我們如何在MVC3中進行數據訪問?我們是否將'MODEL'製作爲數據訪問層或者我們是否添加另一個'DAL'層並從'MODEL'層調用它?
可能重複:
Where to write Database and Business logic in MVC?我們不需要在MVC3架構中使用DAL層嗎?
我剛開始用MVC3模式。我們如何在MVC3中進行數據訪問?我們是否將'MODEL'製作爲數據訪問層或者我們是否添加另一個'DAL'層並從'MODEL'層調用它?
您的型號可以是直接映射的數據訪問對象,但不一定必須是。它們也可以代理您的後端DAL,根據您的要求和項目的長久性,這將始終是更好的選擇。
我傾向於處理較大項目的方式是擁有一個名爲Project.Entities
的獨立名稱空間,其中包含我的實體框架數據模型。我的Project.Models
將包含使用實體作爲其數據的後備存儲的模型,並提供操作該數據的常用方法(必要時)。這可能不是實現它的最好方式,但提供了最大的靈活性,並堅持將數據模型與允許更多抽象的後備存儲區分開。例如,您總是可以將底層數據層切換到內存存儲,另一個DAL而不是實體框架或其他任何其他。
對於較小/臨時/測試項目,我的實體框架數據模型將在Project.Models
中直接使用,並且可以直接使用,因爲它更快,並且不需要太多考慮。
不,模型不是數據訪問。模型是一組用來存放數據的類,它通常不包含代碼,除了可能用來驗證允許分配的值。
您可以從控制器訪問數據。你做這件事完全取決於你,MVC並不擔心。
您的模型應該獨立於數據訪問的東西,這將允許您在將來更改您的DAL策略。
你應該從DAL提供模型,但模型不應該知道它是如何構建的,當然也不應該有任何數據庫特定的代碼。
如果您採取我建議的方法,請查看AutoMapper - 一種用於在DAL和模型類之間映射數據的非常有用的工具。
模型是您的視圖模型,而不是您的域模型。
如果您想要執行DAL活動,我傾向於將其包裝在可注入到控制器中的存儲庫/服務中。
這會阻止您的控制器變得臃腫,並且還允許您模擬您的DAL層以用於單元測試控制器。
這已被問了很多很多很多次。 –
問題是我們在應用程序中需要更多的靈活性嗎?答案是肯定的!我們在這篇文章中提供了很多示例,我們希望將您的系統中的DAL與Db和應用程序邏輯分開,以便如果其中任何一個面臨任何升級,或者如果有任何更改,它不會干擾我們的數據庫或應用程序,DBContext類和您的應用程序之間的圖層,接口或抽象類。 –