我一直在檢查NerdDinner教程。我正在閱讀使用LINQ to SQL和MVC2的原始PDF教程(http://aspnetmvcbook.s3.amazonaws.com/aspnetmvc-nerdinner_v1.pdf)。在該教程中,他們實現了一個數據上下文,然後實現了存儲庫類來與數據實體進行交互。NerdDinner MVC4版本 - 他們爲什麼刪除存儲庫類?
我看到項目已更新爲使用MVC4和實體框架(http://nerddinner.codeplex.com),因此我瀏覽了該代碼以查看他們實施了哪些更改。他們將項目更改爲代碼優先,每個數據實體都有獨立的模型類。我很驚訝地發現他們完全擺脫了倉庫。
我認爲這是通過良好的做法,通過存儲庫模式抽象與數據庫溝通......我知道教程往往使簡短的設計選擇不佳,但我想知道爲什麼一個教程已經實現存儲庫決定從這個版本中省略它們。
MVC4或EF中是否存在使存儲庫過時/冗餘的問題?
EntityFramework和NHibernate(以及其他重量級ORM)已經*爲*版本庫。有時你需要進一步的抽象,大部分時間你都不需要。 –
有趣的是,我在Contoso大學教程中教授的例子中,他們在EF中使用存儲庫(http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing -the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application) – Jim
在我看來,這是完全多餘的並且不增加代碼。 NHibernate具有'ISession'接口,EF沒有'IDbContext',但將DbContext包裝到一個精簡接口中對於可測試性來說應該足夠了。另外,當你將一個沉重的ORM包裝到一個存儲庫中時,你可能會放棄一些好處,比如二級緩存或者創建精細查詢的能力。 –