Я занимаюсь разработкой своего приложения 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 контроллер на приложение), поэтому я не уверен в том, что лучший курс действий.
Я нашел большой вопрос относительно использования общего интерфейса репозитория IRepository<T>
здесь и также кажется идеей статического RepositoryFactory
для ряда блоги. В основном только один экземпляр хранилища хранится когда-либо, и он получается через этот factory
Итак, мой вопрос вращается вокруг того, как люди делают это в приложениях, и что считается хорошей практикой.
У людей есть отдельные репозитории на основе каждой таблицы (IUserRepository
)?
Используют ли они общий IRepository<T>
?
Используют ли они статический репозиторий factory?
Или что-то еще полностью?
EDIT: Я просто понял, что, вероятно, должен спросить:
Имеет ли частный IRepository
на каждом контроллере хороший способ? или я должен создавать новый IRepository
каждый раз, когда я хочу его использовать?
BOUNTY EDIT: Я начинаю щедрость, чтобы получить еще несколько перспектив (не то, что Тим не помог).
Мне любопытно узнать, что делают люди в своих приложениях MVC или что они считают хорошей идеей.