我正在设计我的 ASP.NET MVC 应用程序,我遇到了一些有趣的想法。
我见过的许多示例都描述并使用了存储库模式 ( IRepository
),所以这就是我在学习 MVC 时所做的方式。
现在我知道它在做什么,我开始审视我目前的设计,想知道这是否是最好的方法。
目前我有一个 basic 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>
我在这里发现了一个关于使用通用存储库接口的好问题,并且RepositoryFactory
在许多博客上似乎也有静态的想法。基本上只保留一个存储库实例,它是通过这个工厂获得的
所以我的问题围绕着人们如何在应用程序中做到这一点,以及什么被认为是好的做法。
人们是否有基于每个表 ( IUserRepository
) 的单独存储库?
他们使用泛型IRepository<T>
吗?
他们是否使用静态存储库工厂?
或者完全是别的什么?
编辑:我刚刚意识到我可能也应该问:
在每个控制器上都有一个私有IRepository
的好方法吗?还是IRepository
每次我想使用它时都应该实例化一个新的?
赏金编辑:我开始赏金以获得更多观点(不是蒂姆没有帮助)。
我更想知道人们在他们的 MVC 应用程序中做了什么,或者他们认为什么是好主意。