Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can the VM of MVVM be reused?

Tags:

mvvm

wpf

I just need a simple clarification:

I have an example application with a Model of a ball, and two views (lets say one shows the ball and lets you resize if with the mouse, change it's colour with a click, the second has a control with two child controls (size textbox and colour picker)).

Does MVVM say I must have two VM here, one for each specific View, or am I allowed to reuse the VM without breaking the pattern?

As a follow up question, if I am required to have two VM's is it legitimate, according to the pattern to have one as a derived type of the other, or both as derived types of a base class, or composite classes based on common parts? Basically fulfilling the need for two types but improving reuse?

My example is contrived, I've tried to make the point that both Views affect the same two properties of the model. Max size, available colours, etc are the same between both views.

Thanks

like image 593
Ian Avatar asked Dec 13 '10 14:12

Ian


2 Answers

Use the same coding practices in MVVM that you use anywhere else. In particular, stay DRY. So if you can use the same view model, then do so. I would say reuse of a view model is extremely rare though. If you later have to refactor into two separate view models but can derive from a common base class to reuse common parts, etc. then do so.

like image 196
jason Avatar answered Sep 30 '22 20:09

jason


Yes, VM is very specific to a view and likelihood of re-using is very slim.

In fact I would go further, if you can re-use a VM then I would say it is most probably duplication of the view.

The only exception I can think of is the child view in a nested hierarchical object model structure.

like image 23
Aliostad Avatar answered Sep 30 '22 21:09

Aliostad