这个问题主要与良好的设计有关。
假设我有一个控制器动作,如 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");
}