I've been using MVVM for a while now with WPF. And i've learnt a lot over the course of development (going from never using it, to having a couple of applications developed in it)
However, recently I had some comments directed at the code which made me wonder if i'm doing things the right way. My current setup works (roughly) like this:
- Model - Responsible for storing the data, data validation using IDataErrorInfo and dirty tracking
- ViewModel - Responsible for getting the data (from a repository like pattern) and formatting it for a view's consumption (things like filtering, ordering) also responsible for command handling from the view (save, load, filter changes etc)
- View - The usual UI stuff
Now it was mentioned to me that i should NEVER have business logic inside the model, and that the model should be as thin as possible, the viewmodel should be responsible for handling things such as data validation and dirty tracking.
I've seen comments and criticism on both sides of this, with people against and for putting logic in the model, What i have yet to see is any actual reasons for these sweeping statements. So id love to know if there is an actual reason i should be refactoring my setup.
Also, given that i do move the logic to the viewmodel, I can see the need for having multiple viewmodels where i currently have a single, for example:
Person
- ModelPersonViewModel
- Handles the dirty tracking, data validation etcPersonsViewModel
- Handles getting a collection of PersonViewModels, filtering etcPersonsView
- The UI
This seems a little redundant, but perhaps i'm misunderstanding something. What I'm really looking for is some actual reasons for doing this one way or another, or if this is another argument like the use of code-behind in MVVM (pure opinion with little reasons etc)