I’m new to developing web apps using ASP.NET MVC. In fact, I’m rather new to developing web apps, regardless of technology.
Currently, I’m working on a project just to get to know the ASP.NET MVC framework better. When reading on SO and elsewhere on the internet, the consensus seems to be that the views should never deal directly with the business objects (i.e. objects implementing business logic and containing associated attributes). Instead, view models should be used. However, this introduces a couple of issues:
- Where do I put my validation code?
- I need to add code to map between business objects and view models.
In fact, it seems rather cumbersome and I haven’t really seen anyone explaining properly why it’s a bad idea passing business objects to the views. Could someone please try to explain this (or point to a good explanation)?
Just a clarification; I’m not looking for examples on how to handle the two issues with view models above but simply an explanation on why I should use view models at all.
On the view models you should validate everything that’s specific to the application like for example the date should be in en-US format culture, ….
That’s why there are tools such as AutoMapper.
Different problems arise when you use directly your domain models in the views:
The models might contain properties such as
IsAdminand then I am leaving to your imagination the implication of a controller action with the following signature:assuming that you have hidden this property from the underlying form by not including it.