我有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原则,即使我已经将类别的数量移到某个方法中。有没有更好的方法来解决这个问题,只说明从哪里获取类别?
答案 0 :(得分:0)
我觉得你有些担心。这段代码对我来说很好。这更具可读性。只要您没有很大的性能问题,就不必担心这一点。
如果您仍想在两个地方避免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
。对我来说,这看起来很干净,可读。