【发布时间】:2010-02-27 12:43:41
【问题描述】:
我正在设计我的 ASP.NET MVC 应用程序,我遇到了一些有趣的想法。
我看到的许多示例都描述并使用了存储库模式 (IRepository),所以我在学习 MVC 时就是这样做的。
现在我知道它在做什么,我开始审视我目前的设计,想知道这是否是最好的方法。
目前我有一个基本的IUserRepository,它定义了FindById()、SaveChanges()等方法。
目前,每当我想加载/查询数据库中的用户表时,我都会执行以下操作:
private IUserRepository Repository;
public UserController()
: this(new UserRepository())
{ }
[RequiresAuthentication]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit(string ReturnUrl, string FirstRun)
{
var user = Repository.FindById(User.Identity.Name);
var viewModel = Mapper.Map<User, UserEditViewModel>(user);
viewModel.FirstRun = FirstRun == "1" ? true : false;
return View("Edit", viewModel);
}
[AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken(Salt = "SaltAndPepper")]
public ActionResult Edit(UserEditViewModel viewModel, string ReturnUrl)
{
//Map the ViewModel to the Model
var user = Repository.FindById(User.Identity.Name);
//Map changes to the user
Mapper.Map<UserEditViewModel, User>(viewModel, user);
//Save the DB changes
Repository.SaveChanges();
if (!string.IsNullOrEmpty(ReturnUrl))
return Redirect(ReturnUrl);
else
return RedirectToAction("Index", "User");
}
现在我不完全了解 MVC 在用户创建链接时如何创建控制器(不确定每个用户是否有 1 个控制器或每个应用程序有 1 个控制器),所以我不肯定最佳行动方案。
我发现了一个关于使用通用存储库接口IRepository<T>here 的好问题,并且在许多博客上似乎也有静态RepositoryFactory 的想法。基本上只保留 1 个存储库实例,它是通过这个工厂获得的
所以我的问题围绕着人们如何在应用程序中进行操作,以及什么被认为是好的做法。
人们是否有基于每个表的单独存储库 (IUserRepository)?
他们是否使用通用的IRepository<T>?
他们是否使用静态存储库工厂?
或者完全是别的什么?
编辑: 我刚刚意识到我可能也应该问:
在每个控制器上都有一个私人IRepository 是一个好方法吗?还是每次我想使用它时都应该实例化一个新的IRepository?
赏金编辑: 我开始赏金以获得更多观点(并不是说蒂姆没有帮助)。
我更想知道人们在他们的 MVC 应用程序中做了什么,或者他们认为什么是好主意。
【问题讨论】:
-
通用静态存储库!耶! SingletonSquared,正是我们所需要的! ;-)
-
@Sky,永远都不够。我个人在考虑静态部分通用存储库。
标签: .net asp.net-mvc database-abstraction