0

ある種のカテゴリリストを管理するための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#がプリプロセッサマクロなどをサポートしていないのは残念です。これは、プリプロセッサマクロを使用するのに適した場所だからです。より良いアプローチがない限り?

4

2 に答える 2

0

アクションフィルターを使用し、OnActionExecutingメソッド内で検証を行います。

于 2012-07-24T15:22:58.900 に答える
0

私は、最初の質問で自分自身に提案したアプローチを使い続けることになりました。@ SteveBのT4テンプレートの提案を使用することを検討しましたが、T4テンプレートを使用するのは少し難しいと思います。

于 2012-08-25T13:08:44.653 に答える