0

我有 2 个 ActionResults 返回与 DropDownList 源相同的视图

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

我觉得你有点多虑了。这段代码对我来说很好。这更具可读性。只要您没有大的性能问题,您就不必担心。

如果您仍想避免GetCategories在 2 个地方调用,则可以将其放入 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 回答