2011-08-30 59 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