2013-06-25 233 views
1

我正在開發ASP.NET MVC項目。在我的解決方案中,我有以下項目: BlogApp.Web(ASP.NET MVC應用程序), BlogApp.Data(類庫)ASP.NET MVC數據訪問層

我想知道如何實現數據訪問層。我想使用EntityFramework Code First方法。我在考慮Repository模式,但這真的有必要嗎?我已經讀過,它只是ORM之上的下一層,這不是真的需要。所以,而不是寫作方法,如:

GetAllPosts(Tag t) { 
    db.Posts.Where(p => p.Tags.Contains(t)).Skip(x).Take(y).Select(p => p); 
} 

我在控制器中創建數據庫上下文,並寫入相同的查詢?我不需要在我的模型周圍實現分頁和編寫包裝。

+0

請參閱乾燥原則:不要重複自己。在短期內,可能需要更長的時間才能完成設置(與複製和粘貼相比,時間更長),但從長遠來看,它將爲您節省大量時間進行維護和測試,從而進行調試 - 我們都知道這會花費比首先編寫代碼。 – TODOName

回答

0

不知道這個問題是否屬於這裏。不管怎麼說,如果你在你的控制器中寫入數據訪問邏輯,並且在另一個控制器中需要相同的邏輯,你會怎麼做?複製 - 將其粘貼到新的控制器中?這只是不好。任何時候,你在複製和粘貼你需要退後一步,這裏一定有什麼問題(也就是代碼味道)。

將邏輯分離到不同的層將使您的代碼更易於維護和測試。相信我!

1

您可能聽說過有關Repository模式的消息,它在某些陣營中失寵了 - 例如參見Jimmy Bogard's blog。這並不意味着查詢應直接寫入控制器,除非您的應用程序非常非常簡單。

如前所述,您的查詢應該只寫入控制器可以使用的一個位置 - 這可以位於存儲庫方法中,也可以存儲在專用的查詢對象中,這兩者都可以提供更好的抽象並避免重複。

簡單地說 - 您的應用程序是否打算有多個前端,這將需要爲您的數據訪問層單獨組裝?如果不是,你可能會考慮合併這兩個程序集,並只使用命名空間來保持組織。