Этот вопрос относится в первую очередь к хорошему дизайну.ASP.NET MVC - Повторное использование действий
Предположим, что у меня есть действие контроллера, такое как DeletePage, которое можно вызвать в двух отдельных видах одного и того же контроллера. Предполагая, что логика удаления не содержится в самом действии, а некоторые условные проверки и тому подобное, которые вызывают правильную бизнес-логику, не имеет смысла дублировать структуру действия удаления, когда я могу вместо этого иметь частный метод, который возвращает ActionResult, который я вызываю в обоих действиях, которые могут вызвать удаление. Мой вопрос: где лучше всего разместить метод многоразового действия, подобный этому? Прямо сейчас я просто отмечаю их конфиденциальность и придерживаюсь их в области класса контроллера, но, возможно, запечатанный внутренний класс будет иметь больше смысла для такого метода - или где-то еще.
Мысли?
public ActionResult EditPage(int id, FormCollection formCollection)
{
var page = _pagesRepository.GetPage(id);
if (page == null)
return View("NotFound");
if (page.IsProtected)
return View("IllegalOperation");
if (formCollection["btnSave"] != null)
{
//...
}
else if (formCollection["btnDelete"] != null)
{
return DeletePage(page);
}
return RedirectToAction("Index");
}
public ActionResult DeletePage(int id)
{
var page = _pagesRepository.GetPage(id);
if (page == null)
return View("NotFound");
return DeletePage(page);
}
// Reusable Action
private RedirectToRouteResult DeletePage(Page page)
{
if(page != null && !page.IsProtected)
{
_pagesRepository.Delete(page);
_pagesRepository.Save();
FlashMessage(string.Format(PageForms.PageDeleted, page.Name), MessageType.Success);
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
Как вы относитесь к тому, чтобы придерживаться его в запечатанном внутреннем классе, чтобы его намеренная изоляция от остальных методов действия была очевидна для других? –
@lakario, честно говоря, я думаю, что просто может смутить меня, если вы пошли в такой степени. Если бы я не хотел, чтобы метод был встроен со всеми методами действия контроллера, я бы полностью поместил логику проверки и сохранения в отдельный класс. –