この質問は、主に優れた設計に関係しています。
同じコントローラーの2つの別々のビューで呼び出すことができる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");
}