I have been learning ASP.NET MVC for a few months. I have learned about views and controllers and models and stuff. To design a view, we always need a model.
Usually a model is a just a class which we fill with data and pass to a view. I have a question here: Should a model itself do some calculation, or should it just be dumb?
For example, I have a site where I load Books by Users. My model class is as follows:
public class FormViewModel
{
public User MyUser {get; set;}
public Books UserBooks {get; set;}
//Constructor here.
public FormViewModel(User _user, Books _userBooks)
{
this.MyUser=_user;
this.UserBooks=_userBooks;
}
}
This class doesn’t do anything — it’s just a template. Now if I modify the code as follows:
public class FormViewModel
{
public User MyUser {get; set;}
public Books UserBooks {get; set;}
//Constructor here.
public FormViewModel(User _user)
{
this.MyUser=_user;
this.UserBooks=_user.GetBooks();
}
}
which Books are collected depends on which User has been selected. Now it’s much easier to work with.
I just want to know what is a good approach according to MVC patterns and practices.
You can do it a couple of ways, but I’d say the easiest way would be to pass in the reference identifier for the user which you are trying to access through to the controller action (as below) and let it do all the data access calls.
Then in this controller action you can look up the user details and the books for this user, set the properties on the view model instance and return it to the view to access.
This way the view remains dumb (which it should be) and the model is relatively simple. This also helps with testing purposes.
Hope this helps.