问题:在MVC应用程序中,从ViewModel调用Facade是最佳实践吗?
我使用单个Facade实例来调用所有函数。我为每个操作创建一个ViewModel,并从ViewModel内部填充数据。这使得ViewModel变得更大,但控制器操作变得更薄,因为我们现在在ViewModel中完成了工作。在ViewModel构造函数中,我传递Facade实例并从业务逻辑层取出需要的数据。
public class MyViewModel
{
private Facade _Facade;
public IEnumerable<SomeModel> Collection { get; set; }
public IEnumerable<SelectListItem> Years { get; set; }
public IEnumerable<SelectListItem> Quarters { get; set; }
public int SelectedYear { get; set; }
public int SelectedQuarter { get; set; }
public BottomUpForecastViewModel(EXFacade facade)
{
this._Facade = facade;
this.Years = GetFinancialYears();
this.Quarters = GetFinancialQuarters();
this.SelectedYear = DateTime.Now.Year;
this.SelectedQuarter = TimePeriods.GetQuarterNoForDate(DateTime.Now);
Collection = GetMonthlyCollection(SelectedYear, SelectedQuarter);// Take data from the _Facade(call facade)
}
}
public class MyController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult BottomUpForecast()
{
return View(new MyViewModel(facade));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult BottomUpForecast(MyViewModel model)
{
return View();
}
}
这个做法好吗?如果我们不需要担心依赖性,你有更好的方案建议吗?
更新:我找到了一篇有趣的文章,介绍如何让控制器轻盈 "Put them on a diet": http://lostechies.com/jimmybogard/2013/12/19/put-your-controllers-on-a-diet-posts-and-commands/**
MyViewModel vm = new BusinessLayer().BottomForecastVM(); return view(vm);
https://dev59.com/Unzaa4cB1Zd3GeqPMi0Y#21609548 - CSharper