2011-08-30 60 views
3

我與另一位開發人員討論了使用mvc3和EF引起的視覺混淆的轉換模式。關於存儲庫模式MVC3和EF的建議

我不確定在MVC3和EF中使用存儲庫模式的最佳做法。

可以說我有一個名爲Product的表,其中包含ProductID & ProductName。我創建了我的新EF模型。 我也創建了基本的模型產品型號

public int ProductID{get;set:} 
public string ProductName{get;set} 

如果我控制器知道由EF創建我的實體東西嗎?或者我的意思是說我正在與我的資源庫中的EF交談?

例如一個基本的崗位

[HttpPost] 
public ActionResult Product(ProductModel model) 

然後在我的控制,我的模型傳遞到我的倉庫照顧插入或者應我的控制器直接綁定到我的EF產品型號,然後傳遞到我的倉庫取護理插入。

我認爲使用存儲庫的想法是,可以說在12個月的時間內,如果我想劃出實體框架並使用其他東西,我只需要更新我的存儲庫,不必碰任何我的控制器。

最佳做法是什麼?

回答

2

如果在一段時間改變控制器之後你想升級到stripe out the entity framework,你需要使用存儲庫模式來將持久性邏輯從UI中分離出來。

此外,不要使用模型類作爲視圖models爲MVC層。您可以使用分離的視圖模型的UI邏輯和使用像AutoMapper(http://automapper.codeplex.com/)映射模型類。

1

您的最後一段完美地總結了它。

你想用接口驅動開發,讓你的控制器處理一個IProductRepository

使用依賴注入將具體的實體框架庫注入到Controller中。

由於@Jayantha提到,您的[HttpPost]行爲應該接受ViewModel,而不是EF模型。

然後使用AutoMapper在ViewModel和EF模型之間進行映射。

存儲庫將EF邏輯封裝在一個位置(保存,刪除,更新等),所以你的控制器保持簡單和愚蠢。

保持您的界面儘可能簡單和細化,然後如果/當您切換到新的實現時,只要新的實現符合接口規範,那麼您的控制器不需要更改,只需要依賴注射配置。

+0

我一個m目前正在使用「Generic Repository」用於我所有的EF內容。我有IRepository被注入。 – CrazyCoderz

0

我更喜歡使用開發魔術假,與開發魔術假你不需要使用EF或考慮任何事情,你只需要添加引用開發魔術假裝配並開始使用魔術方法

[HttpPost] 
public ActionResult Product(ProductModel model) 
{ 
    var repoistory = new FakeRepository<ProductModel>(); 
    repoistory.Save(ProductModel); 

欲瞭解更多信息,請參閱CodePlex上的開發魔術假

http://devmagicfake.codeplex.com

感謝 M.Radwan