哪个代码更像是正确的MVC方法?把代码放在控制器或ViewModel中?

时间:2014-01-11 16:30:22

标签: asp.net-mvc

我已经读过,在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);
    }
}

1 个答案:

答案 0 :(得分:2)

第二种选择。顺便说一下,没有'更正确的MVc方法'。有MVC分离就是这样。您的第一个选项打破了这种分离,因为视图模型执行控制器的工作,而不是保持视图数据的“哑”。您不希望将视图模型耦合到模型。

在MVVM中,视图模型有点像控制器,但是这种方法最适合桌面应用程序,而不是网络应用程序。