我已经读过,在MVC应用程序中,应该保持控制器“瘦”。但是当我把代码放到ViewModel中获取数据时,我觉得定位不太直观,这意味着当我进行故障排除时,我通常倾向于首先查看我的控制器(或者这可能是我真正的问题)。此外,如果您通过控制器传递数据,我发现可以为许多不同的事情重用相同的VM。
我是否违反了一些重要原则或导致性能问题?
例如,将这些虚拟片段与两种方法进行比较,两者似乎都可以正常工作:
假设一个名为repositoryy的存储库,其中包含一个GetCourses()方法,用于获取课程列表。
1)ViewModel获取数据,控制器指示流量:
public CourseViewModel
{
private MyProjectEntities db = new MyProjectEntities();
Repository repository = new Repository();
{
public CourseViewModel()
{
Courses = db.Course.ToList();
}
public List<Course> Courses {get; set;}
}
}
public class CourseController : Controller
{
public ActionResult Index()
{
var courseviewmodel = new CourseViewModel();
return View(courseviewmodel);
}
}
2)Controller获取数据,传递给ViewModel,然后传递给View:
public CourseViewModel
{
public List<Course> Courses {get; set;}
}
public class CourseController : Controller
{
public ActionResult Index()
{
var courseviewmodel = new CourseViewModel();
courseviewmodel.Courses = repository.GetCourses.ToList();
return View(courseviewmodel);
}
}
答案 0 :(得分:2)
第二种选择。顺便说一下,没有'更正确的MVc方法'。有MVC分离就是这样。您的第一个选项打破了这种分离,因为视图模型执行控制器的工作,而不是保持视图数据的“哑”。您不希望将视图模型耦合到模型。
在MVVM中,视图模型有点像控制器,但是这种方法最适合桌面应用程序,而不是网络应用程序。