2014-01-11 42 views
0

我已經讀過,在MVC應用程序中,應該保持控制器「瘦」。但是當我在ViewModel中提取數據時,我覺得定位不太直觀,這意味着當我排除故障時,我通常傾向於首先查看我的控制器(或者這可能是我真正的問題)。此外,如果您通過控制器傳遞數據,我發現可以將相同的VM用於許多不同的事情。哪些代碼更適合正確的MVC方法?將代碼放在控制器或ViewModel中?

我違反了一些大原則還是導致性能問題?

例如,比較兩種方法,這些假片斷,似乎都蠻好的工作:

假設一個名爲repositoryy與方法GetCourses()存儲庫獲取課程的列表。

1)視圖模型獲取數據和控制器指示的流量:

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)控制器獲取數據,傳送到視圖模型,然後到檢視:

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); 
    } 
} 

回答

2

第二個選項。順便說一句,沒有更正確的MVC方法。有MVC分離,就是這樣。你的第一個選擇打破了這種分離,因爲視圖模型完成控制器的工作,而不是保持視圖數據的「啞巴」。您不希望將視圖模型耦合到模型。

儘管在MVVM中,視圖模型的行爲有點像控制器,但是這種方法最適合桌面aps而不是web應用程序。

+0

謝謝,我很放心。第一種方法回答太多的SO問題更爲正確。我想如果VM有代碼,測試也會成爲一個問題。 – SKale

相關問題