gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 重用 Action 行为

转载 作者:行者123 更新时间:2023-12-01 11:09:48 24 4
gpt4 key购买 nike

这个问题主要与良好的设计有关。

假设我有一个像 DeletePage 这样的 Controller 操作,可以在同一个 Controller 的两个独立 View 中调用它。假设删除逻辑不包含在操作本身中,而是包含一些调用正确业务逻辑的条件检查等,当我可以使用一个私有(private)方法时,复制删除操作的结构是没有意义的返回一个 ActionResult,我在两个可能导致删除的操作中调用它。我的问题是放置这样的可重用操作方法的最佳位置在哪里?现在我只是将它们标记为私有(private)并将它们粘贴在 Controller 类的一个区域中,但也许密封的内部类对于这样的方法或其他地方更有意义。

想法?

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");
}

最佳答案

我不明白为什么您需要使可重用方法成为操作方法。为什么不只是一个返回 void/bool/etc 指示保存结果的私有(private)方法,而让您的公共(public)操作方法返回 RedirectToAction()?实际上这是相同的结果,但我认为这是一种更清晰的方法。

public ActionResult DeletePage(int id)
{
var page = _pagesRepository.GetPage(id);

if (page == null)
return View("NotFound");

DeletePage(page);
return RedirectToAction("Index");
}

//reusable method
private void DeletePage(Page page)
{
//your same validation/save logic here
}

将来您可能会考虑将此私有(private) DeletePage 方法移动到执行验证和/或保存的单独服务类中。在这种情况下返回 ActionResult 绝对没有意义,因此我认为这个示例更适合您的场景。

关于asp.net-mvc - ASP.NET MVC - 重用 Action 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com