ある種のカテゴリリストを管理するためのCategoriesControllerがあるとします。次のアクションメソッドがあります。
public ActionResult Get(Int32 categoryId);
public ActionResult Edit(Int32 categoryId);
[HttpPost]
public ActionResult Edit(Int32 categoryId, CategoryModel model);
public ActionResult Delete(Int32 categoryId);
[HttpPost]
public ActionResult Delete(Int32 categoryId, DeleteModel model);
これらのメソッドはすべて、categoryId
有効でカテゴリが存在することを確認する同じコードを実行し、データベースから取得して、アクセスレベルの確認を実行します。検証コードの一部はActionResultを直接返しますが、他の部分は返しません(たとえば、categoryIdが存在しない場合は、すぐにHttp404アクションの結果を返しますが、すべてが正常であれば、アクション固有のコードになります。
このようなことをするためにコードの重複を減らす最良の方法はありますか?
private ActionResult EnsureCategory(Int32 categoryId, out DBCategory dbCategory);
public ActionResult Edit(Int32 categoryId) {
DBCategory dbCategory;
ActionResult error = EnsureCategory(categoryId, out dbCategory);
if( error != null ) return error;
// this now means that only 3 lines of code will be shared between the Action methods, but it still seems too much.
}
C#がプリプロセッサマクロなどをサポートしていないのは残念です。これは、プリプロセッサマクロを使用するのに適した場所だからです。より良いアプローチがない限り?