0

DropDownList ソースで同じビューを返す 2 つの ActionResults があります。

Public ActionResult Create()
{
    var model = new ViewModel {
        Entity = new Entity(),
        Categories = GetCategories()
    };

    return View("Edit", model);
}

Public ActionResult Edit(int id)
{
    var model = new ViewModel {
        Entity = GetFromDatabase(id),
        Categories = GetCategories()
    };

    return View(model);
}

カテゴリの人口をメソッドに移動したとしても、DRY の原則を破っているように感じます。これについてもっと良い方法はありますか?

4

1 に答える 1

0

あなたは少し心配しすぎていると思います。このコードは私には問題ないようです。これはより読みやすいです。大きなパフォーマンスの問題がない限り、心配する必要はありません。

それでも 2 つの場所での呼び出しを避けたい場合GetCategoriesは、それを ViewModel クラスのコンストラクターに入れることができます。

public class ViewModel
{
  public ViewModel()
  {
  }
  public ViewModel(bool includeCategories)
  {
    this.Categories=SomeService.GetCategories();
  }

  public List<SelectListItem> Categories { set;get;}
  //other properties
}

これをどう処理するかはあなた次第です。書面による規則はありません。あなたがより読みやすく、きれいに見えると思うものに従ってください。しかし、個人的には、ViewModel を単純な POCO クラスとして保持し、データをロードするためのこのコンストラクター ロジックを使用しません。GetCategories両方のアクション メソッドを呼び出すことができれば幸いです。私には、それはきれいで読みやすいように見えます。

于 2012-11-06T14:09:37.010 に答える