Search code examples
.netmvvmicommand

Why use commands in MVVM


I'm actually learning MVVM pattern.

I can't understand one thing about commands. Why use them? Why don't just use a function (in the View) which call a ViewModel's function? What commands provide us? Apparently they are widely used, but i can't find why.


Solution

  • Why use commands?

    Because commands provide encapsulation. You can hide any kind of complex logic inside a ICommand and you can swap the implementation whenever you need. So that your View doesn't need to know anything about your methods of ViewModel etc. It just needs to know ViewModel provides a command to do operation "x".

    More than that ICommand interface is supported by many framework elements like Button, MenuItem etc. When you have a ICommand you can bind it to the View --it will take care of executing the command.

    Why don't just use a function (in the View) which call a ViewModel's function?

    Because we don't want to mix up the responsibilities. View shouldn't have any logic, it is just a dumb thing which just displays the data to the user. No more.

    Assume if you have logic in your view. One day your manager can come up and say we don't need this UI anymore(it doesn't looks good). Make it something attractive. Not only the View have to be redesigned, but you need to repeat the logic in View there. This is repeated work(against DRY principle), can introduce new bugs because your UI has changed etc.

    Another main advantage of separating the View and Logic is that you can easily unittest the Logic (in ViewModel and Model).